求从1到n-1有多少个数x是和n互质的
互质的意思就是 gcd(x,n)=1
欧拉函数模板
int ouler(int n)
{
int ans=n,i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
ans-=ans/i;
while(n%i==0)
n/=i;
}
if(n>1)
ans-=ans/n;
return ans;
}
int euler(int n)
{
const int border = sqrt(n);
int cnt = n;
for (int i = 2; i <= border; ++i)
{
if (n % i == 0)
{
cnt = cnt / i * (i - 1);
while (n % i == 0)
n /= i;
}
}
if (n > 1)
cnt = cnt / n * (n - 1);
return cnt;
}
void ouler()
{
long long i,j;
for(i=2;i<=maxn;i++)
{
if(!phi[i])
{
for(j=i;j<=maxn;j+=i)
{
if(!phi[j])
phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
}
//类似于埃氏素数筛选法 打出欧拉函数表
}
这里顺带提一下辗转相除法的模板
void gcd(int a,int b)
{
if(b==0)
returna;
return gcd(b,a%b);
}