【BZOJ 3642】Phi的反函数
2024-08-26 03:24:07
http://www.lydsy.com/JudgeOnline/problem.php?id=3643
因为$$\varphi(n)=\prod_i p_i{k_i-1}(p_i-1),n=\prod_ip_i{k_i}$$
直接根据这个式子暴搜即可。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 1 << 16;
bool notp[N];
int prime[N], num = 0, ans;
void shai() {
for (int i = 2; i < N; ++i) {
if (!notp[i])
prime[++num] = i;
for(int j = 1; j <= num && prime[j] * i < N; ++j) {
notp[i * prime[j]] = true;
if (i % prime[j] == 0)
break;
}
}
}
int n;
bool zhi(int x) {
for(int i = (int) sqrt(x); i >= 2; --i)
if (x % i == 0) return false;
return true;
}
ll dfs(int tmp, int k) {
if (k == 1) return 1;
ll ans = -1, t, bas;
int m;
for(int i = tmp; i <= num && prime[i] - 1 <= k; ++i)
if (k % (prime[i] - 1) == 0) {
m = k / (prime[i] - 1); bas = prime[i];
t = dfs(i + 1, m);
if (t != -1 && (ans == -1 || ans > bas * t)) ans = bas * t;
while (m % prime[i] == 0) {
m /= prime[i], bas *= prime[i];
t = dfs(i + 1, m);
if (t != -1 && (ans == -1 || ans > bas * t)) ans = bas * t;
}
}
if (k >= N && zhi(k + 1) && (ans == -1 || ans > 1ll + k))
ans = 1ll + k;
return ans > 2147483647 ? -1 : ans;
}
int main() {
shai();
scanf("%d", &n);
printf("%lld\n", dfs(1, n));
return 0;
}
最新文章
- 当Eclipse报版本低时的处理方法
- Mac系统下开启和关闭隐藏文件的方法
- 话说C++中的左值、纯右值、将亡值
- Java基础知识学习(八)
- SQLServer 分布式查询MySQL
- [2]Telerik Extensions for ASP.NET MVC 中文教程(2)
- undefined与null的区别
- 移动端单页视图库,适用于制作移动Web touchbox
- C++——输入、输出和文件
- Umbraco(5)-Creating Master Template Part 1(翻译文档)
- 《asp.net mvc实战》笔记
- mybatis框架搭建学习初步
- 每天学点Linux:二
- 经典Loading 动漫赏析
- C# 将字符串转为&;#2345;这种的 html实体编码
- .net 发布程序时出现“类型ASP.global_asax同时存在于...”错误的解决办法
- Django学习笔记之模板
- Flex 经验笔记二
- java 多线程12 : 无锁 实现CAS原子性操作----原子类
- poj 1700 Crossing River C++/Java
热门文章
- UI笔记
- 学习ES6生成器(Generator)
- iOS之weak和strong、懒加载及循环引用
- 使用 UICollectionView 实现日历签到功能
- FastDFS+Nginx(单点部署)事例
- Windows on Device 项目实践 3 - 火焰报警器制作
- Windows下FFmpeg各版本库文件下载
- 使用好压(HaoZip)软件打包EverEdit制作安装程序
- Neutron 理解(10):虚拟专用网(VPN)虚拟化 [How Neutron implements VPN Virtualization]
- h3c防火墙的设置过程