磊哥的密码箱icpc11526
2024-10-07 04:42:26
问题 D: 磊哥的密码箱
时间限制: 1 Sec 内存限制: 128 MB
提交: 238 解决: 61
[提交] [状态] [命题人:admin]
题目描述
磊哥有个密码箱,里面装的都是令磊哥羞羞的东西。
箱子的密码是[1,n]里面的约数最多的数的约数数目。
磊哥的女朋友想知道磊哥到底装的是什么东西?她需要你的帮助。
箱子的密码是[1,n]里面的约数最多的数的约数数目。
磊哥的女朋友想知道磊哥到底装的是什么东西?她需要你的帮助。
输入
输入一个整数T,表示有T个测试数据
下面T行,每行输入一个正整数n。
下面T行,每行输入一个正整数n。
输出
对每个n,输出对应一行一个正整数表示[1,n]里最多约数的数的约数个数。
样例输入
复制样例数据
2
13
9
样例输出
6
4
提示
100%的数据满足:1 ≤ n ≤ 1,000,000,000,000,000,000.
解决这道题,涉及一点点数论的知识,点击查看。看完在看这道题(大佬随意QAQ)
具体的思路呢其实就是贪心。
根据唯一分解定理和约数个数定理,我们知道对于每一个数,写成标准分解式(n = p1^a1*p2^a2...pk^ak),约数的个数为(a1+1)*(a2+1)...*(ak+1),为了使的约数的个数尽量多,p应该尽量选小的。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,ans;
int p[]={,,,,,,,,,,,,,,,,,,};
ll qpow(ll a,ll b) //快速幂
{
ll ret=;
while(b)
{
if (b&) ret=ret*a;
a=a*a;
b>>=;
}
return ret;
}
void dfs(ll poi,ll num,ll val,ll len) //枚举第几个质数poi,现在有几个约数,现在的值,ai的最大值
{
if (val>n) return;
if (val<=n) ans=max(ans,num);
for (int i=; i<=len; i++) //相当于枚举这位质数对应的a
{
ll t=qpow(p[poi],i);
if (t>n/val) return;
dfs(poi+,num*(i+),val*t,i);
}
return;
} int main()
{
int T;
cin>>T;
while(T--)
{
ans=;
scanf("%lld",&n);
dfs(,,,);
printf("%lld\n",ans);
}
return ;
}
最新文章
- linux用户权限相关内容查看
- C#+ AE 注意问题汇总(不断更新)
- 自适应UITableView的Cell高度问题
- 更加优雅地配置Spring Securiy(使用Java配置和注解)
- python操作mongodb之六自定义类型存储
- 制作Linux下程序安装包——使用脚本打包bin、run等安装包
- Why you have so few friends?
- VSS汉化后出现问题及解决方法
- 基于jQuery的TreeGrid组件详解
- (转载)LINUX UNBUNTU10.04 下 搭建OC编译环境
- CentOS添加swap分区
- UVA 11249 - Game(游戏)
- [M]表格中的天正文字转换问题
- mvn package 和 mvn install
- Struts 1 之<;logic>;标签库
- 函数select、poll
- 03-openldap服务端安装配置
- bzoj1208splay模板题
- wsgi&;nginx-理解
- UIView的无损截图
热门文章
- iptables设置
- 网站实现https访问
- css 点击打开遮罩
- Kattis - itsamodmodmodmodworld It&#39;s a Mod, Mod, Mod, Mod World (类欧几里得)
- fedora29 下一款截图工具shutter的安装和调试
- hiho #1308 : 搜索二&#183;骑士问题
- 【winfrom-右击快捷菜单】右击或左击时显示快捷菜单
- CentOS 7 各个版本的区别
- C++自动糖果贩卖机
- HDU 6136 Death Podracing (堆)