题目大意:找出从 a 到 b 相应的欧拉函数,将所有数加和输出。(2<a<b<3000000)
题目解析: 首先,根据题目意思写出函数,找出自然数对应的欧拉函数值,之后再一一相加即可。
下面的代码中采取的是直接加和的方式,将前n项和存入数组,之后用前b项和减去前a-1项和即的从a到b的对应欧拉函数加和。
AC代码:(要求有注释)
#include <stdio.h>
#include <string.h>
#define maxn 3000000+100
__int64 e[maxn];
void euler(){
int i,j;
e[1]=1;
for(i=2;i<maxn;i++)
e[i]=i;
for(i=2;i<maxn;i++){
if(e[i]==i){
for(j=i;j<maxn;j+=i)
e[j]=e[j]/i*(i-1);
}
}
for(i=2;i<maxn;i++){
e[i]+=e[i-1];
}
}
int main()
{
int a, b;
euler();
while(scanf("%d%d", &a, &b)!=EOF){
printf("%I64d\n", e[b] - e[a-1]);
/* for(int i=1;i<=b;i++)
printf("%d\n",e[i]);
*/ }
return 0;
}