牛客练习赛14-A-n的约数(爆搜)

链接: 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
#include
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;
}
 
  

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