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 |
i*i<n就TLE,i<sqrt(n)就AC!!!!!!!!!!!!!!!!!!!代码如下: #include<iostream> #include<cstdio> #include<queue> #include<vector> #include<cstring> #include<cmath> #include<algorithm> #define LL long long using namespace std; const int maxn=1000010; int pri[maxn]; int num=0; int n; bool flag[maxn]; void getprime(){ for(int i=2;i<=maxn;i++){ if(!flag[i])pri[num++]=i; for(int j=0;j<num&&i*pri[j]<=maxn;j++){ flag[pri[j]*i]=true; if(i%pri[j]==0) break; } } } LL phi(LL n){ LL ans=n; for(int i=0;i<num&&pri[i]*pri[i]<=n;i++){ if(n%pri[i]==0){ ans=ans/pri[i]*(pri[i]-1); while(n%pri[i]==0)n/=pri[i]; } } if(n>1)ans=ans/n*(n-1); return ans; } int main(){ freopen("i.txt","r",stdin); getprime(); while(scanf("%d",&n)!=EOF){ LL ans=0; for(int i=1;i<=sqrt(n*1.0);i++){ if(i*i==n)ans+=i*phi(n/i); else if(n%i==0){ ans=ans+i*phi(n/i); LL tmp=n/i; ans+=tmp*phi(i); } } printf("%I64d\n",ans); } return 0; } 话说这样卡数据,真的好吗???????我花了4个小时来找这个答案啊!!!! Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator