UVA 10820 Send a Table

UVA_10820

    看到题目说打表我就傻呵呵的把表打出来交了,结果超过了代码长度……

    后来看了别人的解题报告发现欧拉函数做就可以了,本来它就是解决n以内和n互质的数的个数的,数学的基础知识还是不牢固啊……

#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAXD 50010
int N, phi[MAXD], A[MAXD];
void prepare()
{
int i, j, k;
memset(phi, 0, sizeof(phi));
phi[1] = 1;
N = 50000;
for(i = 2; i <= N; i ++)
if(!phi[i])
for(j = i; j <= N; j += i)
{
if(!phi[j])
phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
A[0] = 0;
for(i = 1; i <= N; i ++)
A[i] = A[i - 1] + phi[i];
}
int main()
{
prepare();
for(;;)
{
scanf("%d", &N);
if(!N)
break;
printf("%d\n", 2 * A[N] - 1);
}
return 0;
}


原文地址:https://www.cnblogs.com/staginner/p/2283463.html