【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: ...
随机推荐
- SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)
临时表:Test /****** 对象: Table [dbo].[Test] 脚本日期: 05/10/2013 11:42:07 ******/ SET ANSI_NULLS ON GO SET Q ...
- iOS开发的22个奇谲巧技
结合自身的实践开发经验总结出了22个iOS开发的小技巧,以非常欢乐的语调轻松解决开发过程中所遇到的各种苦逼难题,光读着便已忍俊不禁. 1. TableView不显示没内容的Cell怎么办? 类似于图1 ...
- simplexml_load_string 解析gb2312编码的xml
<?php header('Content-type:text/html;charset=UTF-8'); $url = 'http://www.xxx.com/text.xml'; $cont ...
- 在线调试js工具网站
http://jsfiddle.net/gh/get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highch ...
- SharePoint 2010 RBS 安装和配置的一些记录
1.SharePoint 2010 RBS FILESTREAM Provider 的“垃圾收集”: 在SharePoint 中删除上传的文档RBS并不会在文件系统删除文档,理解只是在内容数据库删除了 ...
- Java实现UDP之Echo客户端和服务端
Java实现UDP之Echo客户端和服务端 代码内容 采用UDP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- ASP.NET Web API 入门大杂烩
[前言] 本文是大杂烩,意思即是:到处Copy再加一点点思考而混在一起的文章,引用来源因为太多太杂故而省略,望原作者原谅. [概述] ASP.NET Web API随ASP.NET MVC 4一起发行 ...
- UITableView 应用及其总结
Plain: Grouped: Cell的结构图: UITableViewCellStyleDefault:预设使用这种,若左侧ImageView没图的话,只有一行字(textLable.text). ...
- spring字符编码设置
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springf ...
- ScrollView图片分页显示-简单
用到的控件: 1>UIScrollView:宽度和图片的宽度一样,因为分页的代码就一句 // 设置分页,这个分页的原理实际上是按照ScrollView的宽进行分页的,这里的图片的宽由于和Scro ...