• luogup1463 反素数


    解法

    分析性质
    考虑反质数的定义,显然反质数是n个数中约数最多且最小的(1)。
    因为数据范围n<21e9,所以一个反质数中最多有10个不同的质因子(因为最小的10个相乘大于范围),
    又因为2^31>2
    1e9,所以指数和最多为30。

    我们可以开始考虑搜索。
    继续减枝:1.它的质因子最大为29,若有更大的质因子,那他本身一定不是最小(违反(1))。
    2.指数一定递减,否则也违反(1)。
    可以了。

    代码

    #include<bits/stdc++.h>
    #define int long long 
    using namespace std;
    const int N=20;
    
    int prime[N]={0,2,3,5,7,11,13,17,19,23,29,31,37};
    int n,maxn=1,Ans,Sum;
    int read()
    {
        int x=0,p=1; char ch=getchar();
        while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
        if(ch=='-') p=-1,ch=getchar();
        while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
        return x*p;
    }
    
    void dfs(int p,int lastc,int sum,int ans)
    {
    	if(ans>Ans || (ans==Ans && sum<Sum)) Ans=ans,Sum=sum;
    	if(p>maxn) return ;
    	
    	for(int i=0;i<=lastc;i++)
    	{
    		if(n<prime[p]*sum) break ;
    		if(i) sum*=prime[p];
    		if(sum<=n)
    			dfs(p+1,i,sum,ans*(i+1));
    	}
    }
    			
    main()
    {
        //freopen(".in","r",stdin);
        //freopen(".out","w",stdout);
    
    	n=read();
    	for(int i=1;;i++)
    		if(maxn*prime[i]<n) maxn*=prime[i];
    		else { maxn=i; break ; }
    
    	dfs(1,30,1,1);
    	cout<<Sum<<endl;
        return 0;
    }
    

    要开long long

  • 相关阅读:
    Django Ajax知识
    Django走过的坑
    Django-8 聚合查询与分组查询
    Django-7 ORM多表操作
    Django-6 Django ORM层
    Django-5 模板层
    docker 常用批量操作
    K8S 从私有仓库拉取镜像
    linux制作iso文件
    二进制安装docker
  • 原文地址:https://www.cnblogs.com/lzqlalala/p/10501538.html
Copyright © 2020-2023  润新知