链接:
https://www.nowcoder.com/acm/contest/82/A
来源:牛客网
来源:牛客网
题目描述
t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数
输入描述:
第一行一个正整数t 之后t行,每行一个正整数n
输出描述:
输出t行,每行一个整数,表示答案
示例1
输入
5 13 9 1 13 16
输出
6 4 1 6 6
备注: t <= 500 , 1 <= n <= 1000000000000000000
直接爆搜枚举每个质因数用的个数(对答案的贡献),更新最大值即可。
#include<stdio.h>
#include<algorithm>
using namespace std;
#define ll long long
ll a[100]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47},n,ans;
int dfs(int num,int up,ll val,int sum)
{
int ret=sum;
ll tmp=n/a[num];
for(int i=1;i<=up && val<=tmp;i++)
ret=max(ret,dfs(num+1,i,val*=a[num],sum*(i+1)));
return ret;
}
int main(void)
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
printf("%d\n",dfs(0,12,1ll,1));
}
return 0;
}