【zoj2562】反素数
题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最小的一个。(1 <= n <= 10^16)
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11781
这时一道反素数的应用。
反素数讲解:http://blog.csdn.net/ACdreamers/article/details/25049767
反素数的定义:对于任何正整数,其约数个数记为
,例如
,如果某个正整数
满足:对任意的正整
数,都有
,那么称
为反素数。
从反素数的定义中可以看出两个性质:
(1)一个反素数的所有质因子必然是从2开始的连续若干个质数,因为反素数是保证约数个数为的这个数
尽量小
(2)同样的道理,如果,那么必有
解释一下:
x = p1^r1 * p2^r2 * p3^r3 ..... * pi^ri
x的约数个数=(r1+1) * (r2+1) * ..... * (rn+1) (指数可以填0~ri)
如果约数都为t1*t2*t3*..*tn,又要x最小,那当然就越小的质数指数越大了。
所以我是这样dfs反素数的:
对于当前数 x = p1^r1 * p2^r2 * p3^r3 ..... * pi^ri
如果r[i]+1<=r[i-1] 那么可以继续乘当前的这个素数,否则不可以
dfs的时候就只有两步,
1. 可以的话再乘当前的素数。
2. 尝试乘下一个素数。
所以这道题其实是水题。。就直接找反素数就可以了。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std; typedef long long LL;
const LL pl=,INF=(LL)1e16;
LL p[]={,,,,,,,,,,,,,};
LL n,a1,a2; void dfs(LL x,LL pr,LL r1,LL r2,LL cnt)
//x当前的数 pr当前到第几个素数
//r1前一个素数的次方数
//r2当前的素数的次方数
//cnt约数个数
{
if(x>n) return ;
if(cnt>a1) a1=cnt,a2=x;
else if(cnt==a1 && x<a2) a2=x; if(pr+<=pl) dfs(x*p[pr+],pr+,r2,,cnt*);
if(!(pr> && r2+>r1)) dfs(x*p[pr],pr,r1,r2+,cnt/(r2+)*(r2+));
} int main()
{
freopen("a.in","r",stdin);
freopen("me.out","w",stdout);
while(scanf("%lld",&n)!=EOF)
{
if(n==) {printf("1\n");continue;}
a1=,a2=INF;
dfs(,,,,);
printf("%lld\n",a2);
}
return ;
}
zoj2562
【zoj2562】反素数的更多相关文章
- zoj2562 反素数
/* 这题1 <= n <= 1016,暴力肯定是TLM,所以看了大牛求解小于N的反素数的算法,思路大致是这样的: 性质1:一个反素数的质因子一定是从2开始的若干个连续质数. 因此可以枚举 ...
- ZOJ- 2562 反素数使用
借用了下东北师大ACM的反素数模版. 本来我是在刷线段树的,有一题碰到了反素数,所以学了一下..有反素数的存在,使得一个x ,使得x的约数个数,在1 到 x的所有数里面,是最大的. 这里面还涉及安叔那 ...
- hdu4542 && ZOJ2562(反素数)
反素数: 对于任何正整数,其约数个数记为,例如,如果某个正整数满足:对任意的正整 数,都有,那么称为反素数. 有两个特点: 1.一个反素数的质因子必是从2开始的质数 2.如果,那么必有 最常见的问题如 ...
- ZOJ-2562 More Divisors 反素数
题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个. 分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4 ...
- zoj2562:搜索+数论(反素数)
题目大意:求n以内因子数量最多的数 n的范围为1e16 其实相当于求n以内最大的反素数... 由素数中的 算数基本原理 设d(a)为a的正因子的个数,则 d(n)=(a1+1)(a2+1)..... ...
- poj 2886 线段树的更新+反素数
Who Gets the Most Candies? Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , ...
- 【POJ2886】Who Gets the Most Candies?-线段树+反素数
Time Limit: 5000MS Memory Limit: 131072K Case Time Limit: 2000MS Description N children are sitting ...
- Prime & 反素数plus
题意: 求因数个数为n的最小正整数k. n<=10^9输出其唯一分解形式 SOL: 模拟题,一眼看过去有点惊讶...这不是我刚看过的反素数吗... 咦数据怎么这么大,恩搞个高精吧... 于是T了 ...
- BZOJ 1053 & 反素数
题意: 反素数,膜一篇GOD's Blog...http://blog.csdn.net/ACdreamers/article/details/25049767 此文一出,无与争锋... CODE: ...
随机推荐
- SQL Server数据库学习笔记-E-R模型
实体(Entities)联系(Relationships)模型简称E-R模型也称E-R方法,是由P.P.Chen于1976年首先提出的.还有一个关键元素Attributes-属性,它提供不受任何数据库 ...
- NPOI导出Excel文件,对单元格的一些设置
HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...
- 替换APK中的jar包文件
[Qboy] 2014年12月21日 这几天,我第一次做的android游戏(WE!青春纪)马上就要上线.上线之前需要把各个渠道的SDK加入到我们游戏中,与渠道进行联运.但是商务很给力,一下子联系了1 ...
- c语言编写的日历
输入年份如2013,显示2013年的日历. 思路: 1.查找每个月1号是星期几(这里利用了1990年1月1号是星期一) 计算年份如2013年1月1号到1990年1月1号有Days天,Day%7得到星期 ...
- HTML统一资源定位器
w3c 更好的解释 在OSGi in action中安装bundle时要加文本传输协议,要不然shell判断不出来
- Careercup - Microsoft面试题 - 5680049562845184
2014-05-10 06:51 题目链接 原题: "How would you find the number of gas stations in the United States?& ...
- appium-UI automator viewer 无[ resource-id ]项
问题:UI automator viewer 无[ resource-id ]项,如下图 解决办法: 手机android 版本太低导致(本人4.2.2),在android4.3机子上运行正常
- MySQL中表格各页面的注意和操作项
- Extjs 选择元素涉及方法总结
本文主要是解释Extjs在使用过程中使用的相关选择方法: 1.首先解释第一组概念: Ext.get(String/HTMLElement/Ext.Element el) Ext.getCmp(Stri ...
- spring framework项目源码github托管地址
方法一:直接下载,github托管地址:http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 方法二: ...