博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】洛谷P1463 [POI2002][HAOI2007] 反素数(约数个数公式+搜索)
阅读量:5323 次
发布时间:2019-06-14

本文共 907 字,大约阅读时间需要 3 分钟。

洛谷P1463:https://www.luogu.org/problemnew/show/P1463

思路

约数个数公式  

ai为质因数分解的质数的指数

定理:

设m=2a1*3a2*...*pak(其中p为第k大的质数)是Antiprime数 则必有a1≥a2≥a3≥...≥ak≥0

因此如果有两个值约数个数相同 则要取值比较小的那个

剪枝:

  1. 有了这个定理我们就可以搜索质数的指数 由于231已经远远超过数据规模 因此我们只需要搜到31层
  2. 质因子的个数最多只有10个(所有质因子相乘得到他们可以凑成的最大值)

代码

#include
using namespace std;int a[20]={
0,2,3,5,7,11,13,17,19,23,29};//打表出前10个质数 long long n,s,s1;void search(long long x,long long y,long long b,long long z){ if(x==11) return;//第二个剪枝 long long k=1; for(int i=1;i<=b;i++)//枚举每个质因子的范围 { k*=a[x];//当前质因子有k个相乘 if(y*k>n) return;//超过范围就跳出 if(z*(i+1)==s1&&y*k
s1)//如果大于它 取大的那个 { s1=z*(i+1); s=y*k; } search(x+1,y*k,i,z*(i+1)); }}int main(){ cin>>n; search(1,1,31,1); //分别为质因子个数 ans 指数层数 约数个数 cout<
View Code

 

转载于:https://www.cnblogs.com/BrokenString/p/9656479.html

你可能感兴趣的文章
apache自带压力测试工具ab的使用及解析
查看>>
加固linux
查看>>
WPF中Image显示本地图片
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
[poj1006]Biorhythms
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
Hover功能
查看>>
js千分位处理
查看>>
Mac---------三指拖移
查看>>
字符串类型的相互转换
查看>>
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>
基础学习:C#中float的取值范围和精度
查看>>
javaagent 简介
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>