UVA

来源:互联网 发布:白鹿原小说败笔 知乎 编辑:程序博客网 时间:2024/06/05 09:37
#include<cstdio>#include<cmath>#include<set>using namespace std;/*输入1-(2^64-1) 之间的超级幂,(即,一个数至少可以分解为两个数的幂)枚举底数,其幂不超过ceil(64 * log(2) / log(i)) - 1,且幂必须为合数*/typedef unsigned long long LL;const int maxn=100+5;int p,prime[maxn];bool is_prime[maxn];//是否为素数//素数筛void sieve(){    for(int i=2;i<maxn;i++)    {        is_prime[i]=1;    }    for(int i=2;i<maxn;i++)    {        if(is_prime[i])        {            prime[p++]=i;            for(int j=2*i;j<maxn;j+=i)            {                is_prime[j]=0;            }        }    }}int main(){    //freopen("out.txt","w",stdout);    sieve();    set<LL>ans;    ans.insert(1);//特殊的超级幂    LL maxT=1<<16;//设定最大底数    for(LL i=2;i<maxT;i++)//枚举底数    {        LL cnt=ceil(64 * log(2) / log(i)) - 1;//幂的最大值        LL x=i;        for(LL j=2;j<=cnt;j++)//遍历幂        {           x*=i;           if(is_prime[j]==0)//幂为合数           {               ans.insert(x);//插入集合           }        }    }    set<LL>::iterator it;    for(it=ans.begin();it!=ans.end();it++)    {        printf("%llu\n",*it);    }    return 0;}
原创粉丝点击