首页 > 其他 > 详细

BZOJ 1053 反素数 题解

时间:2019-09-01 17:04:24      阅读:77      评论:0      收藏:0      [点我收藏+]

题面

引理1:  1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i));

引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,000,000,000;

引理3:  1~n中任何数的质因子的指数总和不超过30;

引理4:  x的质因子是连续的若干个最小的质数,并且指数单调递减;

 对于指数的排列我们只要深搜就可以找到方案,对于不同情况判断是否更新答案;

#include <bits/stdc++.h>
using namespace std;
long long n;
long long ans=99999999999999;
int a[15]={0,2,3,5,7,11,13,17,19,23,29,31};
inline long long KSM(long long a,long long b)
{
    long long res=1;
    while(b){
        if(b&1) res=res*a;
        a=a*a;
        b/=2;
    }
    return res;
}
long long cnt=-1;
inline void dfs(int dep,int now,long long sum,long long num)
{
    if(sum>n||sum<0){
        return;
    }
    if(num>cnt){
        ans=sum;
        cnt=num;
    }
    else if(num==cnt){
        if(sum<ans) ans=sum;
    }
    if(dep>10){
        return;
    }
    for(register int i=now;i>=1;i--){
        dfs(dep+1,i,sum*KSM(a[dep],i),num*(i+1));
    }
}
int main()
{
    cin>>n;
    dfs(1,32,1,1);
    cout<<ans;
} 

 

BZOJ 1053 反素数 题解

原文:https://www.cnblogs.com/kamimxr/p/11442390.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!