链接:https://ac.nowcoder.com/acm/contest/82/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数

输入描述:

  1. 第一行一个正整数t
    之后t行,每行一个正整数n

输出描述:

  1. 输出t行,每行一个整数,表示答案
示例1

输入

复制

  1. 5
  2. 13
  3. 9
  4. 1
  5. 13
  6. 16

输出

复制

  1. 6
  2. 4
  3. 1
  4. 6
  5. 6

备注:

  1. 对于100%的数据,t <= 500 , 1 <= n <= 1000000000000000000
  2.  
  3. 思路:
    一个正整数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
  4.  
  5. 那么我们就可以根据这个规律来枚举 小于等于n的质数的数量情况来求不大于n的约数个数最大数。
  6.  
  7. 还有一点要注意的是, 不会是一个小质数的幂次方为0,而比他更大的质数的幂次方不为零,因为这样不最优。
    我们要的最优不是数最大,而是 约数个数最大,约数个数根据 上面的公式可以看出,如果把大质数的次幂给小质数上,
    约数个数不变的同时,总数值变小了,小数值再乘以更多的质数,又可以让约数个数变大,所以可以证明上述所说。
  8.  
  9. 枚举中用一个变量limit来限定一个质数的幂次方最大值,因为要满足质数的幂次方递减的规律。,
    细节见代码:
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <queue>
  7. #include <stack>
  8. #include <map>
  9. #include <set>
  10. #include <vector>
  11. #include <iomanip>
  12. #define ALL(x) (x).begin(), (x).end()
  13. #define rt return
  14. #define dll(x) scanf("%I64d",&x)
  15. #define xll(x) printf("%I64d\n",x)
  16. #define sz(a) int(a.size())
  17. #define all(a) a.begin(), a.end()
  18. #define rep(i,x,n) for(int i=x;i<n;i++)
  19. #define repd(i,x,n) for(int i=x;i<=n;i++)
  20. #define pii pair<int,int>
  21. #define pll pair<long long ,long long>
  22. #define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
  23. #define MS0(X) memset((X), 0, sizeof((X)))
  24. #define MSC0(X) memset((X), '\0', sizeof((X)))
  25. #define pb push_back
  26. #define mp make_pair
  27. #define fi first
  28. #define se second
  29. #define eps 1e-6
  30. #define gg(x) getInt(&x)
  31. #define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
  32. using namespace std;
  33. typedef long long ll;
  34. ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  35. ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  36. 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;}
  37. inline void getInt(int* p);
  38. const int maxn=;
  39. const int inf=0x3f3f3f3f;
  40. /*** TEMPLATE CODE * * STARTS HERE ***/
  41. int noprime[maxn+];
  42. std::vector<int> p;
  43. void getprime()
  44. {
  45. int m=sqrt(maxn+0.5);
  46. for(int i=;i<=m;i++)
  47. {
  48. for(int j=i*i;j<=maxn;j+=i)
  49. {
  50. noprime[j]=;
  51. }
  52. }
  53. repd(i,,maxn)
  54. {
  55. if(!noprime[i])
  56. {
  57. p.push_back(i);
  58. }
  59. }
  60. }
  61. ll a[]={,,,,,,,,,,,,,,};
  62. ll ans=0ll;
  63. ll n;
  64. void dfs(ll x,int id,int limit,ll num)
  65. {
  66. ans=max(ans,num);
  67. if(id>=)
  68. {
  69. return ;
  70. }
  71. ll temp=a[id];
  72. for(int j=;j<=limit;j++)
  73. {
  74. if(x<=n/temp)
  75. {
  76. dfs(x*temp,id+,j,num*(j+));
  77. temp*=a[id];
  78. }else
  79. {
  80. break;
  81. }
  82. }
  83.  
  84. }
  85. int main()
  86. {
  87. //freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
  88. //freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);
  89.  
  90. int t;
  91. gbtb;
  92. // cout<<(1ll<<60)<<endl;
  93. // cout<<(ll)1e18<<endl;
  94. cin>>t;
  95. while(t--)
  96. {
  97. cin>>n;
  98. ans=0ll;
  99. dfs(1ll,,,1ll);
  100. cout<<ans<<endl;
  101. }
  102.  
  103. return ;
  104. }
  105.  
  106. inline void getInt(int* p) {
  107. char ch;
  108. do {
  109. ch = getchar();
  110. } while (ch == ' ' || ch == '\n');
  111. if (ch == '-') {
  112. *p = -(getchar() - '');
  113. while ((ch = getchar()) >= '' && ch <= '') {
  114. *p = *p * - ch + '';
  115. }
  116. }
  117. else {
  118. *p = ch - '';
  119. while ((ch = getchar()) >= '' && ch <= '') {
  120. *p = *p * + ch - '';
  121. }
  122. }
  123. }
  1.  

牛客练习赛14 A n的约数 (数论)的更多相关文章

  1. 牛客练习赛14 D 比较月亮大小 【水】

    链接:https://www.nowcoder.com/acm/contest/82/D 来源:牛客网 比较月亮大小 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其 ...

  2. 牛客练习赛14 B 区间的连续段 (倍增)

    链接:https://ac.nowcoder.com/acm/contest/82/B来源:牛客网 区间的连续段 时间限制:C/C++ 7秒,其他语言14秒 空间限制:C/C++ 262144K,其他 ...

  3. 牛客练习赛14 D比较月亮大小 (实现)

    链接:https://ac.nowcoder.com/acm/contest/82/D来源:牛客网 题目描述 点点是一名出色的狼人.众所周知,狼人只有在满月之夜才会变成狼. 同时,月亮的大小随着时间变 ...

  4. 牛客练习赛14 E - 无向图中的最短距离 (bfs+bitset)

    一个链接:https://ac.nowcoder.com/acm/contest/82/E来源:牛客网 无向图中的最短距离 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144 ...

  5. 牛客练习赛25 A 因数个数和(数论分块)

    题意: q次询问,每次给一个x,问1到x的因数个数的和. 1<=q<=10 ,1<= x<=10^9 1s 思路: 对1~n中的每个数i,i作为i,2i,3i,...的约数,一 ...

  6. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  7. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  8. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  9. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

随机推荐

  1. Android由出生年月日计算年龄(周岁)

    先从String类型的出生日期(“yyyy-MM-dd”)中提取int类型的年.月.日:再计算岁数. 程序如下: /** * 根据出生日期计算年龄的工具类BirthdayToAgeUtil */ pu ...

  2. 后盾网lavarel视频项目---2、phpstorm显示类中的方法快捷键

    后盾网lavarel视频项目---2.phpstorm显示类中的方法快捷键 一.总结 一句话总结: ctrl + f12 1.npm安装js插件? npm install hdjs 2.phpstor ...

  3. 使用SharpZIpLib写的压缩解压操作类

    使用SharpZIpLib写的压缩解压操作类,已测试. public class ZipHelper { /// <summary> /// 压缩文件 /// </summary&g ...

  4. Abrt

    https://abrt.readthedocs.io/en/latest/faq.html#unpackaged

  5. loj#6034 「雅礼集训 2017 Day2」线段游戏

    分析 区间李超树板子题 代码 #include<bits/stdc++.h> using namespace std; #define db double const int inf = ...

  6. Stream介绍

    一.Stream介绍 现在有这样的需求:有个菜单list,菜单里面非常多的食物列表,只选取小于400卡路里的并且按照卡路里排序,然后只想知道对应的食物名字. 代码: package com.cy.ja ...

  7. webpack中的 chunk,module,bundle的区别,以及hidden modules是什么

    hidden modules是什么: chunk,module,bundle的区别 总结: module是指任意的文件模块,等价于commonjs中的模块 chunks是webpack处理过程中被分组 ...

  8. 移动端自动化==>AppiumApi接口详解

    Appium 初始化配置信息(Desired Capabilities) Desired Capabilities实际上就是一个字典,它主要用于向Appium Server提供初始化配置参数,如:想要 ...

  9. 2.k8s.Pod生命周期,健康检查

    #Pod生命周期,健康检查 pod创建过程 Init容器 就绪探测 存活探测 生命周期钩子 #Pod创建过程 master节点:kubectl -> kube-api -> kubenle ...

  10. oracle-只读数据文件的备份与恢复

    11 只读数据文件的备份与恢复 只读数据文件是只读表空间的数据文件,数据块包括文件头在内部允许更改 SQL> alter tablespace yhqt read only; SQL> a ...