5.4.1 Cantor 的数表
这道题目原书的代码和讲解都有问题0.0,很明显倒数的方向不一样啊。
害得我打击半天。
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; }
5.4.2 因子和阶乘
小的n,不必要使用线性筛素数。
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; }
有向面积
通过行列式的三个点求有向面积(应该是图形学里面的内容)
方法是构建齐次坐标,如果逆时针,有向面积为正,逆时针,有向面积为负。
```
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。