欧拉函数
对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目
互质是公约数只有1的两个整数,叫做互质整数
#include <stdio.h>
//计算欧拉函数
int Eular(int n)
{
int s = n, i;
for(i = 2; i*i <= n; i++){
if(n%i == 0)
s = s/i*(i-1);
while(n%i == 0)
n /= i;
}
if(n > 1)
s = s/n*(n-1);
return s;
}
//筛选法欧拉函数打表
const int N = 1000010;
int a[N] = {1, 1, 0}; //存欧拉函数值
void priEular()
{
int i, j;
for(i = 2; i < N; i++){
if(a[i] == 0){
for(j = i; j < N; j += i){
if(a[j] == 0)
a[j] = j;
a[j] = a[j]/i*(i-1);
}
}
}
}
int main(void)
{
int i, j, k;
int n;
priEular();
scanf("%d", &n);
for(i = 0; i < n; i++)
printf("%d %d %d\n", i, Eular(i), a[i]);
return 0;
}