n的约数(数论+DFS)

const int N=100+5;
const int prime[]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
    ll n,m,t,ans;
    int i,j,k;

void DFS(int pos,ll cnt,ll now,int cur)
//pos 当前素数表的位置,cnt 约数个数,now 当前数的大小,cur 当前的素数最多可以贡献的约数
{
    if(pos>15) return ;
    if(now>n) return ;
    ans=max(ans,cnt);

    ll tmp=1;
    for(int i=1;i<=cur;i++){
        if(n/prime[pos]<tmp) break;
        tmp*=prime[pos];
        if(now>n/tmp) break;
        DFS(pos+1,cnt*(i+1),now*tmp,i);
    }
}
int main()
{
    //IOS;
    rush(){
        sld(n);
        ans=1;
        DFS(1,1,1,25);
        pld(ans);
    }
    PAUSE;
    return 0;
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页