标签:des style http color os io for ar
Description
Input
Output
Sample Input
7 12 0
Sample Output
6 4
Source
刚开始我傻X了,本着蒟蒻的思维,照着欧拉函数的公式写了如下的代码,先筛素数然后分解质因数最后再算公式
//欧拉函数h(n)=n*(1-1/p1)*(1-1/p2)*'''''*(1-1/pk);
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define MAXN 1010
using namespace std;
bool isPrime[MAXN];
int Prime[MAXN],PriNum[MAXN],cnt=0,tot=0;
void GetPrime()
{
cnt=0;
for(int i=1;i<MAXN;i++) isPrime[i]=true;
for(int i=2;i<MAXN;i++)
{
if(isPrime[i])
{
Prime[++cnt]=i;
for(int j=2*i;j<MAXN;j+=i)
isPrime[j]=false;
}
}
}
void DecQualityFactor(int n) //分解质因数
{
tot=0;
for(int i=1;Prime[i]*Prime[i]<=n;i++)
{
if(n%Prime[i]==0)
{
PriNum[++tot]=Prime[i];
while(!(n%Prime[i])) n/=Prime[i];
}
}
if(n!=1) PriNum[++tot]=n;
}
int h(int n)
{
double ans=n;
for(int i=1;i<=tot;i++)
{
ans*=(1.0-1.0/(double)PriNum[i]);
}
return (int)ans;
}
int main()
{
GetPrime();
while(1)
{
cnt=0,tot=0;
memset(PriNum,0,sizeof(PriNum));
int N;
cin>>N;
if(!N) break;
DecQualityFactor(N);
cout<<h(N)<<endl;
}
return 0;
}好吧这个代码根本没办法过,因为题目给的n的范围太大了,数组完爆内存,也就是说这题根本就不能用数组保存什么质因数和素数的。//欧拉函数h(n)=n*(1-1/p1)*(1-1/p2)*'''''*(1-1/pk);
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define MAXN 1000
using namespace std;
int h(int n)
{
int ans=n;
for(int i=2;i<=n;i++)
{
if(n%i==0)
{
ans=ans/i*(i-1);
n/=i;
while(n%i==0) n/=i;
}
}
return ans;
}
int main()
{
while(1)
{
int N;
cin>>N;
if(!N) break;
cout<<h(N)<<endl;
}
return 0;
}
[POJ 2407]Relatives(欧拉函数),布布扣,bubuko.com
标签:des style http color os io for ar
原文地址:http://blog.csdn.net/qpswwww/article/details/38714189