P4780 Phi的反函数

题目

P4780 Phi的反函数_第1张图片

思路

φ(x)=n 当指数均为1时n最小
证明:容斥原理

代码

#include
using namespace std;
#define int long long
const int maxn=1e9;
int ans=INT_MAX,n;
bool f;
map<int,bool> mp;
bool is_prime(int n){
	if(n<=1) return false;
	for(int i=2;i<=n/i;i++) if(n%i==0) return false;
	return true;
}
void dfs(int i,int num,int x){
	if(x>=ans) return;
	if(num==1) { ans=min(ans,1ll*x);f=1;return; }
	if(is_prime(num+1)) dfs(i+1,1,x*(num+1));
	for(int j=2;j<=num/j;j++) if(num%j==0&&!mp[j]&&is_prime(j+1)) mp[j]=1,dfs(j,num/j,x*(j+1)),mp[j]=0;
}
signed main()
{
	cin>>n;
	dfs(1,n,1);
	if(!f) cout<<-1;
	else cout<<ans;
	return 0;
}

end

完结撒花

你可能感兴趣的:(算法,c++,深度优先)