【BZOJ3643】phi的反函数,暴搜
传送门
思路:
爆搜好题,hack好题(?)
程序最后附带三组数据……
暴力搜索有哪些质因子
比较重要的一个是n最多只有一个大于n√\sqrt n的质因子
也就是我们只用找所有小于等于n√\sqrt n的质因子就可以了
每次判断一下,如果当前的x大于n√\sqrt n且是质数,那么直接乘到答案中去就可以了
加上各种的剪枝优化……
话虽这么说但细节还是蛮多的
话说我hack了好几个人……
代码:
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<iostream>
#define LL long long
using namespace std;
int goal;
LL ans=1LL<<60;
int prime[100005];
bool vis[100005];
void init()
{for (int i=2;i<=47000;++i){if (!vis[i]) prime[++prime[0]]=i;for (int j=1;j<=prime[0];++j){if (prime[j]*i>47000) break;vis[prime[j]*i]=1;if (i%prime[j]==0) break;}}
}
bool cal(LL x)
{for (int i=1;i<=prime[0]&&(LL)prime[i]*prime[i]<=x;++i)if (x%prime[i]==0) return 0;return 1;
}
void dfs(LL n,LL x,int p)
{if (n>=ans||(n>=(1LL<<31))||p>prime[0]) return;if (x==1){ans=min(n,ans);return;}if (x>sqrt(goal)&&cal(x+1)){ans=min(n*(x+1),ans);return;}if (n*prime[p]>=ans) return;LL t=1,ph=1;for (int i=p;i<=prime[0];++i){if (x<prime[i]-1) break;if (x%(prime[i]-1)==0){ph=prime[i]-1;t=prime[i];dfs(n*t,x/ph,i+1);ph*=prime[i];t*=prime[i];while (x%ph==0)dfs(n*t,x/ph,i+1),t*=prime[i],ph*=prime[i];}}
}
main()
{scanf("%d",&goal);init();dfs(1,goal,1);printf("%d\n",ans>=(1LL<<31)?-1:ans);
}
/*
1021870080
10219439532147483646
21474836471610547200
2139008425
*/
【BZOJ3643】phi的反函数,暴搜相关推荐
- PTA 家庭房产 (图论,暴搜)
PTA 家庭房产 (图论,暴搜) 题目详情: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N ...
- 紫书 习题7-14 UVa 307(暴搜+剪枝)
这道题一开始我想的是在排序之后只在头和尾往中间靠近来找木块, 然后就WA, 事实证明这种方法是错误的. 然后参考了别人的博客.发现别人是直接暴搜, 但是加了很多剪枝, 所以不会超时. 我也想过这个做法 ...
- 子矩阵(暴搜(全排列)+DP)
子矩阵(暴搜(全排列)+DP) 一.题目 子矩阵 时间限制: 1 Sec 内存限制: 128 MB 提交: 1 解决: 1 [提交][状态][讨论版] 题目描述 给出如下定义: 1. 子矩阵:从一 ...
- hdu4982 暴搜+剪枝(k个数和是n,k-1个数的和是平方数)
题意: 给你两个数n,k问你是否怎在这样一个序列: (1)这个序列有k个正整数,且不重复. (2)这k个数的和是n. (3)其中有k-1个数的和是一个平方数. ...
- hdu4848 DFS 暴搜+ 强剪枝
题意: 给你一个图,然后问你从1出发遍历所有的点的距离和是多少,这里的距离和是每一个点到1的距离的总和,不是选择一条遍历所有点的路径的总长度,时间限制是 8000ms. 思路: ...
- 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合
题目分析 来源:acwing 分析: 先预处理出从1,a,b,c,d,e出发到其他所有点的单源最短路.存在二维数组dist[6][N]中 dfs暴搜所有拜访顺序,共有5!种,对于每一种拜访顺序,可以通 ...
- PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历
文章目录 题目分析 题目链接 题目分析 分析 给了前序遍历和后序遍历,能够确定根结点,但是左子树和右子树的长度是不确定的.这里采用的解决方案是枚举左子树的结点个数,其实右子树的结点个数也确定了.对于每 ...
- Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜
文章目录 题目 题目链接 题目 题目重述:给定一个数n,求一个长度为2n-1的序列:1只出现一次,2~n之间每个数出现2次,并且 对于2 ~n之间的每个数i,两个i之间相差为i,比如n=3,[3,1, ...
- HDU - 6185 Covering(暴搜+递推+矩阵快速幂/杜教BM)
题目链接:点击查看 题目大意:规定宽度为4,给定长度为n,求用1*2和2*1的瓷砖,将其完全铺满能有多少种方法. 分析:自从学会了矩阵快速幂之后,看到1e18的数据量都会下意识的往递推上面想,但是以前 ...
- [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)
一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...
最新文章
- python3 操作redis
- tomcat的jsp页面超过65535,导致500报错
- cnpm install -g @vue/cli
- [原创]修改oracle 数据库默认时间格式
- 网友提问:SAP FUNCTION使用cl_http_client POST REQUEST的问题
- 大众汽车和鸿蒙,鸿蒙系统下个月即将与大众见面,首发平台并非手机
- .NET 将 .config 文件嵌入到程序集
- 价格优化与定价管理软件行业调研报告 - 市场现状分析与发展前景预测
- java 获取客户端的域用户名_使用java有没有办法提取局域网中的客户端的用户名,客户端是以域用户身份进去的...
- Python字符串count()
- Pwn2Own黑客大赛战况:iPhone 20秒被黑
- JAVA对MYSQL进行连接、插入、修改、删除操作
- R语言data manipulation学习笔记之创建变量、重命名、数据融合
- Python中的get和set方法
- html5介绍 之亮点特性
- iOS 处理图片的一些小 Tip
- VMware ESXi 客户端连接控制台时,提示“VMRC 控制台连接已断开...正在尝试重新连接”的解决方法
- PSPnet网络结构搭建
- 纲要-Java网络爬虫系统性学习与实战(1)
- usb声卡驱动_哑巴电脑拯救者——它可能是你见过使用最简单的外接声卡!
热门文章
- 全民上云时代,如何降低成本?
- oracle数据库表excel文件位置,Excel数据导入到oracle数据库表方法
- levelshifter工作原理_从滑块问题看Level Shifter中Latch的状态转换
- MySQL统计两部分查询结果记录数量比值
- Atom Latex Settings
- Python文件读取(1.1)
- Python统计TXT词云
- Python05 梯形公式 Simpson公式 Cotes公式 Romber公式(附代码)
- html雪碧图效果,html和css中雪碧图的使用
- w ndows2000,华塑CAE软件简介