您的位置:首页 > 其它

反素数

2016-04-05 18:39 351 查看
  反素数的定义: 对于任何的正整数n,其约数的个数记为f(n),例如f(6) = 4,如果某个正整数n满足,对于任意正整数i,0<i<n都有f(i)<f(n)那么称n为反素数。

两个性质:

(1)一个反素数的所有质因子必然是从2开始的连续若干个质数,因为反素数是保证约数个数为

的这个数

尽量小

(2)同样的道理,如果

,那么必有


根据这2个性质可以找到反素数。可以用搜索来查找。

模板:

#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 1000000001
#define ll unsigned long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int MAXN = 510;
int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,39,41,43,47,53,59,61,67};
ll n;
ll ans,ans_cnt;
void getarcprime(ll cur,ll cnt,int limit,int k)
{
if(cur > n)return;
if(cnt > ans_cnt){
ans_cnt = cnt;
ans = cur;
}
else if(cnt == ans_cnt && cur < ans){
ans = cur;
}
for(int i = 1; i <= limit; i++){
if(n / prime[k] < cur){
return;
}
getarcprime(cur*prime[k],cnt*(i+1),i,k+1);//性质二
cur = cur*prime[k];
}
}
int main()
{
int t;
cin >>t;
while(t--){
cin >>n;
ans = 0;
ans_cnt = 0;
getarcprime(1,1,60,0);
cout<<ans<<" "<<ans_cnt<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: