欧拉函数模板题
int euler(int x)
{
int 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;
}
if(x > 1)
res = res/x *(x-1);
return res;
}
求小于x的与x互质的数的个数
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
int euler(int x)
{
int 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;
}
if(x > 1)
res = res/x *(x-1);
return res;
}
int main()
{
int n;
while(scanf("%d",&n) && n)
printf("%d\n",n-1-euler(n));
return 0;
}