这是一道裸的欧拉函数题目:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int euler(int x)
{
int unsigned i, res=x;
for (i = 2; i < (int)sqrt(x * 1.0) + 1; i++)
if(x%i==0)
{
res = res / i * (i - 1);
while (x % i == 0) x /= i; // 保证i一定是素数
}
if (x > 1) res = res / x * (x - 1);
return res;
}
int main()
{
int n,m,i;
while(scanf("%d",&n,&m)!=EOF)
{
int sum=0;
for(i=n; i<=m; i++)
{
sum+=euler(i);
}
printf("%d\n",sum);
}
return 0;
}
下面是两种求欧拉函数的不同编程方法: /*==================================================*\ |