| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:你贴一下程序In Reply To:你贴一下程序 Posted by:frkstyc at 2005-07-15 01:37:38 #include<iostream>
#include<vector>
#include<math.h>
using namespace std;
#define max_v 100000
__int64 p[50000];
vector<int>pr;
__int64 ph(int m)
{
int x=m;
if(m<50&&p[m]) return p[m];
__int64 r=1;
for(int i=0;i<pr.size();i++){
if(m%pr[i]==0){
r*=pr[i]-1;m/=pr[i];
while(m%pr[i]==0){m/=pr[i];r*=pr[i];}
}
if(m<50&&p[m]){r*=p[m]; break;}
}
if(x<50)p[x]=r;
return r;
}
int gcd(int a,int b)
{
if(b==0)return a;
return gcd(b,a%b);
}
int main()
{
int i;
for(i=2;i<50000;i++)
if(!p[i])
{
pr.push_back(i);
int x=i+i;
while(x<50000){p[x]=1;x+=i;}
}
int x;
memset(p,0,sizeof(p));
p[1]=1;
__int64 f;
x=1;
while(cin>>x) {
f=0;
for(int i=1;i<=sqrt(x);i++){
if(x%i==0){
f+=(x/i)*ph(i);
if(i*i!=x)f+=i*ph(x/i);
}
}
printf("%I64d\n",f);
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator