ZOJ-More Divisors

来源:互联网 发布:湖州淘宝拍摄 编辑:程序博客网 时间:2024/05/21 17:07

题目:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2562

题意:

求小于等于n的约数最多的数。就是求反素数。

思路:

枚举小质因子搜索找反素数。

反素数约数必然是res=2^a+3^b+5^c+7^d……;

枚举质因子个数,约数个数就是所有质因子的组合。

代码:

#define N 112long long n,m;long long flag,sum,ave,ans,res,len,ans1,ans2;bool mark[N];int pri[N],cnt;void SP(){    cnt=0;    memset(mark,true,sizeof(mark));    mark[0]=mark[1]=false;    for(int i=2;i<=N;i++)        if(mark[i])        {            pri[cnt++] = i;            for(int j=2;j*i<N;j++)                mark[j*i]=false;        }}void solve(long long now,long long num,long long k){    if(num>sum)sum=num,res=now;    if(num==sum&&res>now)sum=num,res=now;    if(k>20)return;    for(int i=1;i<50;i++)    {        if(now*pri[k]<=n)            now*=pri[k];        else            break;        solve(now,num*(i+1),k+1);    }}int main(){    int i,j,k,kk,t,x,y,z;    while(scanf("%lld",&n)!=EOF&&n)    {        sum=0;res=n;        solve(1,1,0);        printf("%lld\n",res);    }    return 0;}






0 0
原创粉丝点击