首页 > 代码库 > HDU 1215
HDU 1215
由算术基本定理,
直接使用公式就好
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Maxp=1000;bool isprime[Maxp];int prime[Maxp],nprime;void Doprime(){ memset(isprime,true,sizeof(isprime)); nprime=0; isprime[1]=false; for(int i=2;i<Maxp;i++){ if(isprime[i]){ prime[nprime++]=i; for(int j=i*i;j<Maxp;j+=i){ isprime[j]=false; } } }}int main(){ Doprime(); int t,n; scanf("%d",&t); while(t--){ scanf("%d",&n); int tn=n; int ans=1; for(int i=0;i<nprime&&prime[i]<=n;i++){ int tmp=1; if(n%prime[i]==0){ while(n%prime[i]==0){ n/=prime[i]; tmp*=prime[i]; } ans=ans*(tmp*prime[i]-1)/(prime[i]-1); } } // cout<<n<<endl; if(n!=1) ans=ans*(n+1); printf("%d\n",ans-tn); } return 0;}
HDU 1215
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。