反素数——http://www.zybbs.org/JudgeOnline/problem.php?id=1053

对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。
如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。
现在给定一个数N,你能求出不超过N的最大的反质数么?


先百度知道反素数性质

性质一:一个反素数的质因子必然是从2开始连续的质数.

因为最多只需要10个素数构造:2,3,5,7,11,13,17,19,23,29

性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....


搜索。。。

View Code
#include<stdio.h>
#include<math.h>

int prim[11]={0,2,3,5,7,11,13,17,19,23,29};
long long max=0,n,best=0;

void dfs(int now,int t,long long all,int add)
{
if(all>n||t==0)return;

if(add==max&&all<best)//约数相同时,best尽量小
{
best=all;
}
if(add>max)//约数大时,更新约数与best
{
max=add;
best=all;
}

int i;
for(i=1;i<=t;i++)
{
dfs(now+1,i,all*(long long )pow(1.0*prim[now],1.0*i),add*(i+1));
}
}

int main()
{
int i;
while(scanf("%lld",&n)!=EOF)
{
max=0;best=0;
dfs(1,10,1,1);

printf("%lld\n",best);
}
}



原文地址:https://www.cnblogs.com/huhuuu/p/2243018.html