1053: [HAOI2007]反素数ant

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2872  Solved: 1639
[Submit][Status][Discuss]

Description

  对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x
,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么

Input

  一个数N(1<=N<=2,000,000,000)。

Output

  不超过N的最大的反质数。

Sample Input

1000

Sample Output

840

//这个数学题有意思,本来求约数个数,就是一个数的质数个数乘啊乘的,不难,

举个例子,60 = 2*2*3*5 根据排列组合,约数个数就是 3*2*2=12 (2 可以有 0,1,2 三种选择,同理 3 有 0,1 两种选择,5 也是 2 种)

但是求范围内的最大的反质数,数据太大,循环太慢,

就只能逆向思维一下了,用质数去组合

质数必定会连续,因为不连续 一定有更小的数约数个数与这个数相等,例如 a = 2*3*7 , b = 2*3*5 约数个数相同,但 a 更大 ,所以 a 一定不是 反质数

懂了就简单了

0ms

 #include <stdio.h>
typedef long long LL; const int p[]={,,,,,,,,,,,};//全部有一个就大于20E这个数据范围了
LL n,ans,m_yue; void dfs(int dep,LL num,LL yue)
{
if (dep>=) return;
if (yue>m_yue)
{
ans=num;
m_yue=yue;
//printf("??? %lld\n",ans);
}
if (m_yue==yue&&num<ans) ans=num;
for (int i=;i<=;i++)//i 代表多少次方
{
if (num*p[dep]>n) break;
dfs(dep+,num*=p[dep],yue*(i+));
}
} int main()
{
scanf("%lld",&n);
ans=,m_yue=;
dfs(,,);//深度,数字,约数个数
printf("%lld\n",ans);
return ;
}

最新文章

  1. 菜鸟学Struts2——零配置(Convention )
  2. 集合List内容
  3. oracle 密码过期处理
  4. JS-offsetParent定位父节点
  5. Windows 8.1 安装Ruby on Rails手记
  6. Match:Oulipo(POJ 3461)
  7. POJ2104 &amp; 主席还是可持久化还是 函数式
  8. 数据库表被锁表,select会等待。
  9. Red and Black ---路线问题
  10. (转)linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top
  11. 经典SQL练习题
  12. 第七章:Python基础のXML操作和面向对象(一)
  13. crontab语法
  14. JavaScript 获取鼠标点击位置坐标
  15. 文字描边css
  16. Python zip() 处理多于两个序列的参数, 存储结对的值
  17. MATLAB 简明教程
  18. ubuntu mysql主从库的搭建
  19. 使用GCD创建单例
  20. 【OpenCV】SIFT原理与源码分析

热门文章

  1. SparkStreaming数据源Flume实际案例分享
  2. ElasticSearch的内存设置
  3. git学习资料及心得
  4. NYOJ 49 开心的小明(01背包问题)
  5. Elasticsearch教程(一),全程直播(小白级别)
  6. Android NDK生成共享库和静态库
  7. Win7 无法将快捷方式从任务栏移除怎么办
  8. PS 文字有锯齿怎么办
  9. SharedPreferences具体解释(一)——基础知识
  10. OpenStack 网络总结之:openstack中网络的基本概念