UVA 10791 Minimum Sum LCM
2013-08-14 21:24
405 查看
四种情况要特殊考虑,
一种是n是质数,输出n+1;
第二种n是质数的次方,输出n+1;
第三种n=1,输出2
第四种n=2147483647,要输出n+1,但是超int了,要开long long
其他的都不是问题
一种是n是质数,输出n+1;
第二种n是质数的次方,输出n+1;
第三种n=1,输出2
第四种n=2147483647,要输出n+1,但是超int了,要开long long
其他的都不是问题
#include<stdio.h> #include<math.h> #include<string.h> #define LL long long const int maxn=100000; int pri[maxn],vis[maxn]; void getpri() { int i,j,k; for(i=2;i*i<maxn;i++)if(!vis[i]) for(j=i*i;j<maxn;j+=i)vis[j]=1; for(i=2,j=0;i<maxn;i++)if(!vis[i]) pri[j++]=i; } LL calcu(int n) { int i,j,k,tmp; long long ans=0; int sqr=sqrt(n+0.5); for(i=0;pri[i]<=sqr;i++) if(n%pri[i]==0) { tmp=1; while(n%pri[i]==0) { n/=pri[i]; tmp*=pri[i]; } ans+=tmp; if(n==1)break; } if(n>1)ans+=n; return ans; } int main() { int i,j,n,k=1; printf("%d\n",(1<<31)-1); getpri(); while(scanf("%d",&n)!=-1&&n) { printf("Case %d: ",k++); LL ans=calcu(n); if(ans==n)ans++; if(n==1)ans=2; printf("%lld\n",ans); } return 0; }
相关文章推荐
- uva 10791 - Minimum Sum LCM
- UVA 10791 Minimum Sum LCM
- Minimum Sum LCM UVA - 10791——唯一分解定理
- Minimum Sum LCM 唯一分解定理+求质因数UVA - 10791
- Minimum Sum LCM UVA - 10791
- UVA 10791(p317)----Minimum Sum LCM
- uva 10791 Minimum Sum LCM(数论)
- UVA 10791 - Minimum Sum LCM
- UVa 10791 Minimum Sum LCM(素因子分解)
- Minimum Sum LCM 唯一分解定理+求质因数UVA - 10791
- UVA 10791 Minimum Sum LCM
- UVa 10791 - Minimum Sum LCM
- UVa 10791 (唯一分解) Minimum Sum LCM
- UVA 10791 Minimum Sum LCM
- UVA - 10791 Minimum Sum LCM
- Minimum Sum LCM 唯一分解定理+求质因数UVA - 10791
- uva 10791 Minimum Sum LCM ( 唯一分解定理 )
- UVA 10791 Minimum Sum LCM(唯一分解定理)
- UVa 10791 Minimum Sum LCM (数论&素因子分解)
- uva 10791 Minimum Sum LCM(算术基本定理)