Antiprime数-数论
题目描述 Description
如果一个自然数n满足:所有小于它的自然数的约数个数都小于n的约数个数,则称n是一个Antiprime数。譬如:1、2、4、5、12、24都是Antiprime数。
输出格式:
输入样例:
1000
输出样例:
840
思路:
这个问题可以转化为求n以内约数最多的数,对于一个n,如果它的质因子越小,那么它能分解的因子个数也就越多,而对于有相同因子数的两个数,较小的那个更具有更新的空间,所以当两个数有相同因子数时,我们取较小一个。
根据唯一分解定理,任何一个大于1的数都可以分解为许多质数的乘积,并且根据质因数的个数可以算出约数的个数,公式为:n=P1x+P2y+P3z+P……,这个n的约数个数为(x+1)(y+1)(z+1)(…+1),那么这题,我们可以从1,从小到大循环,每次分解这个数为质因数,最终找到约数最多的数(约数相同取较少的,因为假如取较大的那个,因为较小的那个在前面,并且约数个数和较大的那个一样,这样就会出现较大的数不满足Antiprime数定义,所以我们取较小的数,这样前面就不会有数来和它冲突),输出即可。
但这样会超时,我们不妨做一下优化,逆用唯一分解定理,从小到大枚举每个质因数的使用个数(由数据范围限定最多枚举到23),搜索答案。
记住一定要用long long。
代码如下:
#include<cstdio>
#include<cmath>
long long n,maxx,num[]={,,,,,,,,,,},ans;
void findd(long long now,long long tot,long long u,long long v)//当前累计值,当前累计因数个数,上个质因数使用次数,枚举位置
{
if(maxx<tot||(tot==maxx&&ans>now))
{
maxx=tot;
ans=now;
}
if(v>=) return;
for(long long i=;i<=u;i++)
{
now*=num[v];
if(now>n) return;
findd(now,tot*(+i),i,v+);
}
}
int main()
{
scanf("%I64d",&n);
findd(,,,);
printf("%I64d\n",ans);
return ;
}
Antiprime数-数论的更多相关文章
- [swustoj 373] Antiprime数
Antiprime数(0373) 问题描述 如果一个自然数n(n>=1),满足所有小于n的自然数(>=1)的约数个数都小于n的约数个数,则n是一个Antiprime数.譬如:1, 2, 4 ...
- COGS 693. [SDOI2005]Antiprime数 唯一分解定理逆用
693. Antiprime数 ★★ 输入文件:antip.in 输出文件:antip.out 简单对比 时间限制:1 s 内存限制:128 MB 如果一个自然数n(n>=1), ...
- 巴蜀1088 Antiprime数
Description 如果一个自然数n(n>=1),满足所有小于n的自然数(>=1)的约数个数都小于n的约数个数,则n是一个Antiprime数.譬如:1, 2, 4, 6, 12, 2 ...
- Catalan数(数论)
Catalan数 [参考网址]http://www.cnblogs.com/gongxijun/p/3232682.html 记得当时我们队写过一个,差点超时,现在找到了公式,感觉还是挺简单的. 还要 ...
- P4844 LJJ爱数数 数论
思路: 化简后得到(a+b)c=ab,设g=(a,b),A=a/g,B=b/g,则g(A+B)c=ABg^2,即(A+B)c=ABg 由题目已知条件:(a,b,c)=1,即(g,c)=1,g|(A+B ...
- 洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes【取回文数/数论/字符串】
题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000 ...
- 【LOJ6482】LJJ 爱数数 数论
题目大意 给你 \(n\),求 \[ \sum_{a=1}^n\sum_{b=1}^n\sum_{c=1}^n[\frac{1}{a}+\frac{1}{b}=\frac{1}{c}][\gcd(a, ...
- 2018.09.09 cogs693. Antiprime数(搜索)
传送门 看完题发现很sb. 前10个质数乘起来已经超出题目范围了. 因此只用搜索前几个质数每个的次数比较谁的因数的就行了. 代码: #include<iostream> #define l ...
- HDU 4565 So Easy! 广义斐波拉数 数论 (a+sqrt(b))^n%mod 模板
So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
随机推荐
- linux 10 -Bash Shell编程
二十三. Bash Shell编程: 1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...
- selenium java 封装
1.简单介绍 1)展示如何封装selenium的api,使其符合我们的使用需求: 2)展示如何使用page object模式写selenium脚本: 3)展示如何即时查找元素,用以操作ajax页面: ...
- Please install Android target
今天在执行ionic build android时出现以下错误: [Error: Please install Android target: "android-22". Hint ...
- PAT 天梯赛 【】 L3-015. 球队“食物链” 【BFS+剪枝】
题目链接 https://www.patest.cn/contests/gplt/L3-015 思路 用一个 数组标记 胜负 每次输入一行字符串 然后遍历 如果 碰到 W 那么 vis[i][j] = ...
- Python 3 mysql 数据类型
Python 3 mysql 数据类型 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/m ...
- hbase shell-general(常规指令)
hbase shell常规指令解释篇 1. status (显示集群状态,master,server情况,显示内容的详略程度可选) hbase(main)::> help 'status' Sh ...
- 中美贸易战再次开启,世界两极化进程正在加快形成!..... Copyright: 1688澳洲新闻网 Read more at: https://www.1688.com.au/world/international/2018/06/17/369368/
中美贸易战再次开启,世界两极化进程正在加快形成! https://www.1688.com.au/world/international/2018/06/17/369368/
- 四分位数及matlab实现
四分位数(quantile),解释及调用形式如下. quantile(x,y,z)的三个参数的说明如下:x表示要求的矩阵或者向量:y的取值为表示要求的分位数,如四分之一中位数0.25,四分之三中位数0 ...
- Android 之 Matrix(转)
原文:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#code Android Matrix Matrix的数学原理 平 ...
- Winform中的dataGridView添加自动编号
1.Winform中的dataGridView添加自动编号:http://blog.csdn.net/ohyoyo2014/article/details/38346887 2.如何为datagrid ...