uva 10820

来源:互联网 发布:php urlencode 编辑:程序博客网 时间:2024/05/21 22:34

题意:给出一个数字n,问小于等于n的两个数一共有多少个互质组合。

题解:先用欧拉函数,求小于等于n的和n互质的数的个数,可以迭代求出小于等于n的互质组合。

#include <stdio.h>#include <string.h>#include <math.h>const int N = 50005;int res[N], n;int main() {res[1] = 1;for (int i = 2; i < N; i++) {if (!res[i]) {for (int j = i; j < N; j += i) {if (!res[j])res[j] = j;res[j] = res[j] / i * (i - 1);}}}//以上为欧拉函数,即求<=n的数中与n互质的个数for (int i = 3; i < N; i++)res[i] += res[i - 1];while (scanf("%d", &n) && n) {if (n == 1) {printf("1\n");continue;}printf("%d\n", res[n] * 2 + 1);}return 0;}


0 0