1.欧拉函数
用来求比n小的互质的数
模版:
int oula(int n)
{
int cnt=1;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
n/=i;cnt*=i-1;
while(n%i==0)
n/=i,cnt*=i;
}
}
if(n>1)
cnt*=n-1;
return cnt;
}
例题:POJ2407 Relative
http://poj.org/problem?id=2407
#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
using namespace std;
#define maxn 1000000000
int oula(int n)
{
int cnt=1;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
n/=i;cnt*=i-1;
while(n%i==0)
n/=i,cnt*=i;
}
}
if(n>1)
cnt*=n-1;
return cnt;
}
int main()
{
int n;
while(scanf("%d",&n))
{
if(n==0)
break;
printf("%d\n",oula(n));
}
return 0;
}