牛客练习赛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<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;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值