zoukankan      html  css  js  c++  java
  • 【洛谷P1463】反素数

    题目大意:给定 (N < 2e9),求不超过 N 的最大反素数。

    题解:
    引理1:不超过 2e9 的数的质因子分解中,最多有 10 个不同的质因子,且各个质因子的指数和不超过30。
    引理2:题目要求的最大反素数,实际上是求不超过 N 的数中因子数最多的数的集合中最小的那个数。
    引理3:通过引理 2 以及交换证明法可以得出,各个质因子指数必须单调递减。

    代码如下

    #include <bits/stdc++.h>
    using namespace std;
    
    int n,cnt[15];
    long long ans,sum;
    int p[11]={0,2,3,5,7,11,13,17,19,23,29};
    
    void dfs(int now,long long val,long long sum0){
    	if(now==11){
    		if(sum0>sum||(sum0==sum&&val<ans))ans=val,sum=sum0;
    		return;
    	}
    	for(int i=0;i<=cnt[now-1];i++){
    		if(val>n)break;
    		cnt[now]=i;
    		dfs(now+1,val,sum0*(i+1));
    		val*=(long long)p[now];
    	}
    }
    
    void solve(){
    	ans=1e12,cnt[0]=0x3f3f3f3f;
    	scanf("%d",&n);
    	dfs(1,1,1);
    	printf("%lld
    ",ans);
    }
    
    int main(){
    	solve();
    	return 0;
    } 
    
  • 相关阅读:
    Shell IFS
    Crontab
    linux awk
    free
    条件语句练习2
    条件语句练习
    打印菜单
    条件测试语法
    read 命令
    jQuery(实例)
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/10542783.html
Copyright © 2011-2022 走看看