码迷,mamicode.com
首页 > 其他好文 > 详细

唯一分解定理求和

时间:2018-10-20 16:20:24      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:name   const   ==   cout   int   i++   ons   --   break   

 

暴力了一点

#include<iostream>
using namespace std;
const int maxn=1e6+10;
int vis[maxn];
int prime[maxn];
int tot=0;
void findprime(int n)
{
    for(int i=2;i<=n;i++)
    {
        if(vis[i]==0) prime[++tot]=i;
        for(int j=1;j<=tot&&i*prime[j]<=n;j++)
        {
            vis[i*prime[j]]=1;
            if(i%prime[j]==0) break;
        }
    }
}
int main()
{
    int n=1e6+10;
    findprime(n);
    int T; cin>>T;
    while(T--)
    {
        int n; cin>>n;
        int ans=1;
        for(int i=1;i<=tot && n!=1 ;i++)
        {
            if(n%prime[i]==0)
            {
                int c=1; n=n/prime[i];
                while(n%prime[i]==0) {c++, n=n/prime[i]; }
                int t=1;
                int x=prime[i];
                for(int k=1;k<=c;k++)
                {
                    t+=x;
                    x=x*prime[i];
                }
                ans*=t;
            }

        }
        if(n) ans*=n;
        cout<<ans<<endl;
    }

}

 

唯一分解定理求和

标签:name   const   ==   cout   int   i++   ons   --   break   

原文地址:https://www.cnblogs.com/Andromeda-Galaxy/p/9821628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!