反素数ant(数学题)
2024-09-04 03:27:25
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 ;
}
最新文章
- 学习笔记 MYSQL盲注
- Linux 系统中僵尸进程
- 基于webmagic的爬虫项目经验小结
- js的小效果-图片放大镜效果
- 带Left Join的SQL语句的执行顺序
- ps -aux
- 数据结构之------C++指针冒泡排序算法
- Win8.1系统下安装nodeJS
- kettle工具同步数据乱码-Linux下乱码问题二
- @pathvariable 注解
- ReactNative 基础学习
- Python--socketserve源码分析(二)
- 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器
- _tcsdup这个函数容易出现堆错误
- Ubuntu18.04上安装java
- UVA11468 Substring
- jsp/servlet学习四之jsp初窥
- Sqlite,libevent,openssl,mosquito交叉编译
- Docker(十二)-Docker Registry镜像管理
- Java-Shiro(三):Shiro与Spring MVC集成
热门文章
- python项目构建工具zc.buildout
- ES,ZK,Mysql相关参数优化
- JS-只能输入中文和英文
- 将ByteArrayOutputStream类型变量中的数据存储到文件中
- 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_函数块
- Android学习(二十)Notification通知栏
- C# Socket.Connect连接请求超时机制
- DPM(Deformable Part Model)原理详解(汇总)
- 修改pip源为国内网站
- Android 关于SD的操作