牛客练习赛14 A、N的约数

题目描述:
t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数
输入描述:
第一行一个正整数t
之后t行,每行一个正整数n
输出描述:
输出t行,每行一个整数,表示答案

一个书的约数的个数等于把它素因数分解得到的素因数的指数都+1然后累乘。
小的素因数的指数大的话会更优。
now记录现在乘到了多少,ans统计答案,num表示选到了第几个素数
(不过我看到很多题解第16个素数打的是51…不过能A)

#include
#include
using namespace std;
long long maxx,n;
int t;
int prime[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
void dfs(long long now,long long ans,int num,int aha)
{
    maxx=max(maxx,ans);
    for(int i=1;i<=aha;i++)
    {
        if(now<=n/prime[num])
        {
            now*=prime[num];
            dfs(now,ans*(i+1),num+1,i);
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>t;
    while(t--)
    {
        maxx=0;
        cin>>n;
        dfs(1,1,0,16);
        cout<return 0;
}

你可能感兴趣的:(数论,搜索)