https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1060
反素数https://baike.baidu.com/item/反素数/8005979?fr=aladdin
题目等价于求1-n内最大的反素数 由其两个性质 可以直接爆搜 还有注意细节处理 判断当前值乘某个素因子是否符合条件时 要两边同除该素因子 否则爆long long
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll prime[20];
ll val;
int lim[20];
int maxx;
bool book[1010];
void init()
{
int i,j;
memset(book,0,sizeof(book));
book[1]=1;
for(i=2;i*i<=1000;i++)
{
if(!book[i]) for(j=i+i;j<=1000;j+=i) book[j]=1;
}
for(i=1,j=1;j<=15;i++)
{
if(!book[i]) prime[j++]=i;
}
}
void dfs(ll n,int cur,int pre,ll sum,int cnt)
{
int i;
if(cur==16) return;
for(i=1;i<=pre&&sum<=n/prime[cur];i++)
{
sum*=prime[cur];
if(maxx<cnt*(i+1)||(maxx==cnt*(i+1)&&val>sum)) val=sum,maxx=cnt*(i+1);
dfs(n,cur+1,i,sum,cnt*(i+1));
}
}
int main()
{
ll n;
int t;
init();
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
val=1,maxx=1;
dfs(n,1,100,1,1);
printf("%lld %d\n",val,maxx);
}
return 0;
}