反素数问题是用来求约数最多的数的
反素数的两个性质
性质一:一个反素数的质因子必然是从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;
}