這道題目原書的代碼和講解都有問題0.0,很明顯倒數的方向不同啊。
害得我打擊半天。rest
c#include <stdio.h> #include <string.h> const int maxn = 10000; int main() { int n; int m; int sum; freopen("input", "r", stdin); while(~scanf("%d", &n)) { sum = 0; m = 1; while(1) { sum += m; if(!(sum < n)) break; m ++; } if(sum == n) { if(m % 2) printf("1/%d", m); else printf("%d/1", m); } else { int rest = n + m - sum; if(m % 2) printf("%d/%d", m+1-rest, rest); else printf("%d/%d", rest, m+1-rest); } printf("\n"); } return 0; }
小的n,沒必要要使用線性篩素數。code
c#include <stdio.h> #include <string.h> bool is_prime(int n) { for(int i = 2; i * i <= n; i++) if(n % i == 0) return 0; return 1; } int prime[100], count[100]; int pnum = 0; void init() { for(int i = 2; i <= 100; i++) if(is_prime(i)) prime[pnum++] = i; } int main() { init(); int n, t; while(~scanf("%d", &n)) { memset(count, 0, sizeof(count)); int maxp; for(int i = 1; i <= n; i++) { t = i; for(int j = 0; j < pnum; j++) while(t % prime[j] == 0) { t /= prime[j]; count[prime[j]] ++; maxp = maxp > j ? maxp : j; } } printf("%d! = ", n); for(int i = 0; i <= maxp; i++) { printf(" %d", count[prime[i]]); } printf("\n"); } return 0; }
經過行列式的三個點求有向面積(應該是圖形學裏面的內容)input
方法是構建齊次座標,若是逆時針,有向面積爲正,逆時針,有向面積爲負。string
```it