反素数

反素数问题是用来求约数最多的数的

反素数的两个性质

性质一:一个反素数的质因子必然是从2开始连续的质数.
性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....
这是杭电上的一道题
#include<stdio.h>
__int64 maxsum,bestnum,n;
int prime[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
void getantiprime(__int64 num,__int64 k, __int64 sum,__int64 limit){
    if(num>n)return ;
      if(num>bestnum&&sum<=maxsum)return ;//此不优化,可以节省不少不必要的工作
    if(sum>maxsum){
        bestnum=num;
        maxsum=sum;
    }
    if(sum==maxsum&&num<bestnum)bestnum=num;
    if(k>16)return ;
    int i;
    __int64 p;
    p=prime[k];
    for(i=1;i<limit;i++){
        if(num*p>n)return;
        getantiprime(num*p,k+1,sum*(i+1),i);
        p=p*prime[k];

    }
    return ;


}
int main(){
    int t,i;
    scanf("%d",&t);
    for(i=1;i<=t;i++){
        scanf("%I64d",&n);
        maxsum=1;bestnum=1;
        getantiprime(1,0,1,50);
        printf("Case #%d: %I64d\n",i,bestnum);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值