luoguP1463:反素数ant(打表心得☆)

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

Step 1

这个是在openjudge上(7591)能A的代码(原题:输出l~r的所有反素数),因为那时n<=2e7啊。

当然也要讲一下原理。对于数的因子个数,不得不提唯一分解定理——n=a1^p1*a2^p2*…………其中a为该数的质因数,p为它的个数,比如49=7^2,其中a1=7,p1=2。于是因子个数为(p1+1)*(p2+1)*……(49有2+1=3个因子,1,7,49)。那么搜索的目的就很明显了,枚举质因子凑数字,凑出来的那一刻已经得到了它的因子个数!

给质数打个表,打多少呢?前十几个质数虽然都很小,但乘起来肥肠肥肠恐怖啊(不信你自己试一试),所以后面都不用了。

继续剪枝,举个栗子,2^3*3^2=72,2^2*3^3=108,它们的因子个数都为(2+1)*(3+1)=12,72明显小于108,也很明显如果把3的次方给2匀一个答案更优。同样的道理,2*3=6 < 2*5=10,如果质因数的组合不连续则一定存在更小的数比当前更优。

最后我们画一棵解答树,第一层是2^1、2^2、2^3……它们的分支都有3^1、3^2、3^3……之后还有5、7、11等等接着找(具体参考程序,id为第几个质因数,now是数的大小,tot是因子数)。

 

#include<cstdio>
#include<algorithm>
using namespace std;
int maxn,L,R,f,ans[20000010],p[]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
void dfs(int id,int now,int tot)
{ans[now]=tot;for(int i=1;now*p[id]<=R;++i) dfs(id+1,now*=p[id],tot*(i+1));
}
int main()
{scanf("%d%d",&L,&R);dfs(1,1,1);for(int i=1;i<L;++i) maxn=max(maxn,ans[i]);for(int i=L;i<=R;++i)if(ans[i]>maxn){maxn=ans[i];f?printf(","):f=1;printf("%d",i);}if(!f) puts("NO");return 0;
}

 

Step 2

如果能做到第一步,你就已经有一个不错的爆搜程序了,但对于2e9的范围来说还是弱了不少。仔细读题,发现这两道题还是有点区别的,我们不必求出这个范围内的所有反素数,只用找到那个最大的。既然这样,那我们就直奔答案寻找新的优化。更新条件有两个注意不要漏(估计只有像我这样头不好的人才会两次都写错……),之后参考Step 1的剪枝,我们尽量让小质数的次方数大,这也就意味着对于2^p1*3^p2*5^p3,满足p3<=p2<=p1。开个use数组记录一下p就好了。

 

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<cstring>
 7 #define ll long long
 8 #define inf 1<<29
 9 using namespace std;
10 int n,p[]={0,2,3,5,7,11,13,17,19,23,29,31},use[20];
11 ll maxt,ans;
12 void dfs(ll id,ll now,ll tot)
13 {
14     if(tot>maxt||(tot==maxt&&now<ans)) ans=now,maxt=tot;
15     use[id]=0;
16     while(now*p[id]<=n&&use[id]+1<=use[id-1]){
17         use[id]++;
18         now*=p[id];
19         dfs(id+1,now,tot*(use[id]+1));
20     }
21 }
22 int main()
23 {
24     scanf("%d",&n);
25     use[0]=1<<29;
26     dfs(1,1,1);
27     printf("%lld",ans);
28     return 0;
29 }

 

Step 3

用我之前的程序可以打出比较小的表(2e8以内),观察一下,发现反素数其实很少,而且越往后它们的间隔越大(147026880~183783600,△=3e7+)。这也就意味着我们不用一个一个数去枚举小于它的最大的反质数。于是,先记录2e9的答案为1396755360,再把它减一输入程序,不断重复该操作与小的表接起来。我们终于打出最后的表了。(不容易啊QAQ~~~~~)

 

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define ll long long
 4 using namespace std;
 5 int n,biao[]={1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040,7560,10080,15120,20160,25200,27720,45360,50400,55440,83160,110880,166320,221760,277200,332640,498960,554400,665280,720720,1081080,1441440,2162160,2882880,3603600,4324320,6486480,7207200,8648640,10810800,14414400,17297280,21621600,32432400,36756720,43243200,61261200,73513440,110270160,122522400,147026880,183783600,245044800,294053760,367567200,551350800,698377680,735134400,1102701600,1396755360};
 6 int main()
 7 {
 8     scanf("%d",&n);
 9     for(int i=0;i<68;++i)
10         if(biao[i]>n){
11             printf("%d",biao[i-1]);
12             return 0;
13         }
14     printf("%d",biao[67]);
15     return 0;
16 }

 

转载于:https://www.cnblogs.com/12mango/p/7592925.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

席南华院士:数学的意义

本文转自返朴公众号2020年5月30日&#xff0c;中国科学院院士、中国科学院数学与系统科学研究院研究员席南华受邀作远程报告“数学的意义”&#xff0c;从数学的发展史、数学的特性、数学巨匠的一些观点以及数学美的含义等多个角度讲述了数学的意义。本文为报告文字整理版&…

2017-9-26 NOIP模拟赛

NOIP 2017 全真模拟冲刺 ---LRH&&XXY 题目名称 那些年 铁路计划 毁灭 题目类型 传统 传统 传统 可执行文件名 years trainfare destroy 输入文件名 years.in trainfare.in d…

108页报告一文看懂光刻机,看国产替代如何破局【附下载】

来源&#xff1a;方正证券光刻机是人类文明的智慧结晶&#xff0c;被誉为半导体工业皇冠上的明珠。光刻机作为前道工艺七大设备之首&#xff0c;价值含量极大&#xff0c;在制造设备投资额中单项占比高达23%&#xff0c;技术要求极高&#xff0c;涉及精密光学、精密运动、高精度…

【bzoj 3601】一个人的数论 (莫比乌斯反演+伯努利数)

题解&#xff1a; &#xff08;吐槽&#xff1a;网上题解那个不严谨猜测真是没谁了……关键是还猜得辣么准……&#xff09; 直接化简到求和那一段&#xff1a; $f_{d}(n)\sum_{t|n}\mu(t)t^{d}\sum_{i1}^{\frac{n}{t}}i^{d}$ $设S_{d}(T)\sum_{i1}^{T}i^{d}$ 那这个是什么呢&a…

院士论坛|李德仁:测绘遥感与智能驾驶

来源&#xff1a;测绘学报未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业图谱…

深度报告:一文看懂生物芯片产业

来源&#xff1a;赛迪顾问生物芯片技术起源于二十世纪八十年代&#xff0c;也被称为“微流控技术”、“芯片实验室”等。生物芯片技术能够在邮票大小的芯片上&#xff0c;进行较为复杂的生物、化学、物理等实验&#xff0c;为制作成本低、样本少、时间短、操作简单的医疗仪器提…

人机融合的难点

来源&#xff1a;人机与认知实验室【一个深度态势感知者的周围充满了各种各样的暗示和提醒。】“我小时候读过很多科幻小说。其中一个最常见的主题是“人与机器”&#xff0c;它经常以机器人的形式变得自我意识和威胁人类。这一主题也成为了《终结者》和《黑客帝国》等好莱坞电…

asp.net core权限模块的快速构建

大部分系统都会有权限模块&#xff0c;别人家系统的权限怎么生成的我不知道&#xff0c;我只知道这样做是可以并且挺好的。 文章中只对asp.net core的部分代码进行说明 呃 记录~&#xff0c;mvc版本自行前往仓库查阅 代码中的一些特性标记后面列出,或前往仓库查看~ 1.根据特性标…

深度长文:AMD的崛起、衰落与复兴

来源&#xff1a;内容编译自「techspot」&#xff0c;谢谢。AMD是最早的大型微处理器设计者之一&#xff0c;近50年来一直是技术爱好者之间争论的话题。它的历史构成了一个激动人心的故事——充满了英雄式的成功&#xff0c;愚蠢的错误。在其他半导体公司来来往往的时候&#x…

数据结构-使用两个栈实现一个队列

1&#xff1a;如何只使用stack实现queue呢&#xff1f;我们知道stack是先进后出的&#xff08;FIFO&#xff09;&#xff0c;而queue是先进先出的&#xff08;FIFO&#xff09;。也就是说&#xff0c;stack进行了一次反向。如果进行两次反向&#xff0c;就能实现queue的功能&am…

5G时代下,边缘计算产品的未来展望

来源&#xff1a;北京物联网智能技术应用协会首发于人人都是产品经理。一、边缘计算市场潜力1. 5G基建如火如荼&#xff0c;万物互联互融将成为新战场2019年6月6号上午工信部宣布正式为中国移动、中国联通、中国电信、中国广电四家企业颁发5G牌照&#xff0c;中国正式进入5G元年…

使用Xcode进行iOS设备无线调试

设备环境&#xff1a;Mac OSX 10.12.5、iOS11、Xcode9PS:这是WWDC2017的新功能&#xff0c;iOS11以上&#xff0c;Xcode9这是刚性要求。这个功能不好找&#xff0c;就记下来了 手机连接上Xcode&#xff0c;打开Xcode菜单&#xff1a;Windows->Device and Simulators。找到连…

java 请求url 返回数据_java后台发起get请求获取响应数据|chu

本文实例为大家分享了java后台发起get请求获取响应数据&#xff0c;供大家参考&#xff0c;具体内容如下学习记录&#xff1a;话不多说直接上代码&#xff1a;package com.jl.chromeTest; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.H…

Android Studio 设置字体

File->Settings->Editor->Colors & Fonts->Font->Editor Font 转载于:https://www.cnblogs.com/WJQ2017/p/7608370.html

这三个博弈论新趋势,正深刻影响深度强化学习

来源 | AI科技评论作者 | Jesus Rodriguez编译 | 亚尔曼•佩皮校对 | 丛末 & Camel博弈论在现代人工智能&#xff08;AI&#xff09;解决方案中正扮演着至关重要的角色&#xff0c;深度强化学习&#xff08;DRL&#xff09;正是积极拥抱博弈论的头等公民。从单智能体程序到…

美国再出半导体新法案!1800亿谋求芯片制造振兴

文章来源&#xff1a;EE Times、James E.Risch芯东西&#xff08;ID&#xff1a;aichip001&#xff09;编 | 董温淑芯东西7月1日消息&#xff0c;上周&#xff0c;多位美国两党议员共同提出《2020美国晶圆代工法案&#xff08;AFA&#xff0c;The American Foundries Act Of 20…

stackexchange.mysql_.net core使用redis基于StackExchange.Redis

.net core使用redis基于StackExchange.Redis教程&#xff0c;具体如下一.添加引用包StackExchange.RedisMicrosoft.Extensions.Configuration二.修改配置文件 appsettings.json{"RedisConfig": {"Redis_Default": {"Connection": "127.0.0.…

Apache网站服务

Apache 下载地址&#xff1a; http://mirror.bit.edu.cn/apache/httpd/相关软件下载地址&#xff1a;http://mirror.bjtu.edu.cn/apache/apr/apr          http://mirror.bjtu.edu.cn/apache/apr/apr-utilApache 简介&#xff1a; 进程技术&#xff0c;高资源消耗&…

微积分的发展史

来源&#xff1a;数学中国早期萌芽时期&#xff1a;1、 古西方萌芽时期&#xff1a;公元前七世纪&#xff0c;泰勒斯对图形的面积、体积与的长度的研究就含有早期微积分的思想&#xff0c;尽管不是很明显。公元前三世纪&#xff0c;伟大的全能科学家阿基米德利用穷竭法推算出了…

c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...

[c#]代码库代码中使用事务前提&#xff1a;务必保证一个功能(或用例)在同一个打开的数据连接上&#xff0c;放到同一个事务里面操作。首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行&#xff0c;并事务执行打开同一个连接、事务完成关闭同一个连接的一个…