牛客练习赛14 A n的约数 (数论)
链接:https://ac.nowcoder.com/acm/contest/82/A
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数
输入描述:
第一行一个正整数t
之后t行,每行一个正整数n
输出描述:
输出t行,每行一个整数,表示答案
备注:
对于100%的数据,t <= 500 , 1 <= n <= 1000000000000000000 思路:
一个正整数n,我们可以将其唯一分解得到 n= p1^(x1)*p2^(x2)*p3(x3)...*pk^(xk)
n的约数个数 是 (x1+1)*(x2+1)*(x3+1)*...*(xk+1)
其中 p1<p2<p3<p4... <pk
而 x1>x2>x3>x4>...>xk 那么我们就可以根据这个规律来枚举 小于等于n的质数的数量情况来求不大于n的约数个数最大数。 还有一点要注意的是, 不会是一个小质数的幂次方为0,而比他更大的质数的幂次方不为零,因为这样不最优。
我们要的最优不是数最大,而是 约数个数最大,约数个数根据 上面的公式可以看出,如果把大质数的次幂给小质数上,
约数个数不变的同时,总数值变小了,小数值再乘以更多的质数,又可以让约数个数变大,所以可以证明上述所说。 枚举中用一个变量limit来限定一个质数的幂次方最大值,因为要满足质数的幂次方递减的规律。,
细节见代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=;while(b){if(b%)ans=ans*a%MOD;a=a*a%MOD;b/=;}return ans;}
inline void getInt(int* p);
const int maxn=;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
int noprime[maxn+];
std::vector<int> p;
void getprime()
{
int m=sqrt(maxn+0.5);
for(int i=;i<=m;i++)
{
for(int j=i*i;j<=maxn;j+=i)
{
noprime[j]=;
}
}
repd(i,,maxn)
{
if(!noprime[i])
{
p.push_back(i);
}
}
}
ll a[]={,,,,,,,,,,,,,,};
ll ans=0ll;
ll n;
void dfs(ll x,int id,int limit,ll num)
{
ans=max(ans,num);
if(id>=)
{
return ;
}
ll temp=a[id];
for(int j=;j<=limit;j++)
{
if(x<=n/temp)
{
dfs(x*temp,id+,j,num*(j+));
temp*=a[id];
}else
{
break;
}
} }
int main()
{
//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout); int t;
gbtb;
// cout<<(1ll<<60)<<endl;
// cout<<(ll)1e18<<endl;
cin>>t;
while(t--)
{
cin>>n;
ans=0ll;
dfs(1ll,,,1ll);
cout<<ans<<endl;
} return ;
} inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '');
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * - ch + '';
}
}
else {
*p = ch - '';
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * + ch - '';
}
}
}
牛客练习赛14 A n的约数 (数论)的更多相关文章
- 牛客练习赛14 D 比较月亮大小 【水】
链接:https://www.nowcoder.com/acm/contest/82/D 来源:牛客网 比较月亮大小 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其 ...
- 牛客练习赛14 B 区间的连续段 (倍增)
链接:https://ac.nowcoder.com/acm/contest/82/B来源:牛客网 区间的连续段 时间限制:C/C++ 7秒,其他语言14秒 空间限制:C/C++ 262144K,其他 ...
- 牛客练习赛14 D比较月亮大小 (实现)
链接:https://ac.nowcoder.com/acm/contest/82/D来源:牛客网 题目描述 点点是一名出色的狼人.众所周知,狼人只有在满月之夜才会变成狼. 同时,月亮的大小随着时间变 ...
- 牛客练习赛14 E - 无向图中的最短距离 (bfs+bitset)
一个链接:https://ac.nowcoder.com/acm/contest/82/E来源:牛客网 无向图中的最短距离 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144 ...
- 牛客练习赛25 A 因数个数和(数论分块)
题意: q次询问,每次给一个x,问1到x的因数个数的和. 1<=q<=10 ,1<= x<=10^9 1s 思路: 对1~n中的每个数i,i作为i,2i,3i,...的约数,一 ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
随机推荐
- kubernetes master 更换ip(单节点)
问题分析 master ip地址变更以后,我们首先应该检查以下内容: /etc/kubernetes/manifests下面的config配置文件,替换里面对应的ip 相关的证书文件 客户端文件 解决 ...
- linux交叉编译Windows版本的ffmpeg
主要参考http://www.cnblogs.com/haibindev/archive/2011/12/01/2270126.html 在我的机器上编译libfaac的时候 出现问题了 输出如下 . ...
- 什么是HOOK功能?
HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现.这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API.中断服务.IFS和NDIS ...
- 【mysql】时间类型-如何根据不同的应用场景,选择合适的时间类型?
首先理解mysql时间存储类型,与使用场景 一些帮助理解的资料: 摘自:MySQL如何存储时间datetime还是timestamp MySql中关于日期的类型有Date/Datetime/Times ...
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_1 今日课程内容介绍
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_02.三层架构和ssm框架的对应关系
- zstack分配的虚拟机的dns设置
环境: $ uname -a Linux 10-57-19-61 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x8 ...
- HTML5 表单的补充+注意事项
input标签中 type="image" 与 type="submit"属性 的区别 (下文简写image和submit) 1.这两者都可以响应请 ...
- 【ABAP系列】SAP 如何用ABAP实现自动发送外部邮件
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 如何用ABAP实现自动发 ...
- Java多线程学习——sleep和yield
Thread.sleep(); Thread.yield(); 相同点: 让线程暂停运行. 都是静态方法,可以直接调用. 不同点: sleep让线程从运行状态进入阻塞状态,但是不放开手中的资源. yi ...