本文主要是介绍nyoj-291-LK的数学题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//法一
#include<stdio.h>
int eular(int n)
{
int i,m=1;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
n/=i;
m*=i-1;
while(n%i==0)
{
n/=i;
m*=i;
}
}
if(n>1)
m*=n-1;
return m;
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
printf("%d\n",eular(n));
}
return 0;
}
//法二
#include<stdio.h>
int eular(int n)
{
int i,m=n,t=0;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
t=1;
n/=i;
m=m-m/i;
while(n%i==0)
{
n/=i;
}
}
if(t==1&&n>1) return m-m/n;
else if(t==1||n==1) return m;
return n-1;
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
printf("%d\n",eular(n));
}
return 0;
}
这篇关于nyoj-291-LK的数学题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!