对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x
,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么
?
一个数N(1<=N<=2,000,000,000)。
不超过N的最大的反质数。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int s[20]; long long n,ans,maxn; int pl[13]={0,2,3,5,7,11,13,17,19,23,29,31,37}; void dfs(long long x,int y,int z){ if(z==11) return ; if(y>maxn||y==maxn&&x<ans) maxn=y,ans=x; s[z]=0; while(x*pl[z]<=n&&s[z]<s[z-1]){ s[z]++; x*=pl[z]; dfs(x,y*(s[z]+1),z+1); } } int main(){ cin>>n; s[0]=1000000; dfs(1,1,1); cout<<ans; }
BZOJ(8) 1053: [HAOI2007]反素数ant
原文:https://www.cnblogs.com/cangT-Tlan/p/9190599.html