您的位置:首页 > 其它

欧拉函数 模板题 POJ2407 Relatives

2012-09-27 17:55 351 查看
题目大意&&思路:φ(n)是积性函数,所以n=P1^k1*……*Pn^kN(素数因子分解)

所以:φ(n)=φ(P1^k1)*……*φ(Pn^kN)

而对于φ(P1^k1),原式等于:P1^k-P1^(k-1),即是(P1-1)*P1^(k-1);在此题目中,因子的次数不会大于31,所以直接POW函数就可以解决问题

 

AC program:

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef __int64 LL;
int pp[100005];
int nn[100005];
int main()
{
LL n;
while(cin>>n,n)
{
LL k=0;
LL tmp=n;
for(LL i=2;i*i<=tmp;)
{
if(n%i==0)
{

LL cnt=0;
pp[k]=i;
while(n%i==0)
{
n/=i;
cnt++;
}
nn[k++]=cnt;
}
else i++;
}
if(n!=1)
{ pp[k]=n;  nn[k++]=1;}
LL sum=1;
for(LL i=0;i<k;i++)
{
sum*=(pp[i]-1)*(int)( pow(pp[i]*1.0,(nn[i]-1)*1.0 ) );
}
cout<<sum<<endl;
}
return 0;}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: