zoj 2562(反素数)

来源:互联网 发布:新闻软件下载排行榜 编辑:程序博客网 时间:2024/05/17 04:03

对于任何正整数x,记约数的个数记做g(x).例如g(1)=1,g(6)=4.

如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数.

性质一:一个反素数的质因子必然是从2开始连续的质数.

性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....

#include <cstdio>#include<iostream>#include<cstring>using namespace std;long long prim[14]={2,3,5,7,11,13,17,19,23,29,31,37,41,43};long long ans,ans_sum,n;void back_prim(long long cnum,long long csum,long long k,long long limit){    if(cnum>n) return ;    else if(csum>ans_sum) ans=cnum,ans_sum=csum;    else if(csum==ans_sum && cnum<ans) ans=cnum;    long long p=prim[k];    for(int i=1;i<=limit;i++,p*=prim[k]){        if(cnum*p>n) break;        else back_prim(cnum*p,csum*(i+1),k+1,i);    }}int main(int argc, char** argv) {    while(scanf("%lld",&n)!=-1){        ans=1,ans_sum=1;        back_prim(1LL,1LL,0,50);        printf("%lld\n",ans);    }    return 0;}


原创粉丝点击