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;
    } 
    
  • 相关阅读:
    https authorization basic
    第二十一章 单例模式
    第十九章 组合模式
    第十八章 备忘录模式
    第十七章 适配器模式
    第十六章 状态模式
    新博客~
    CF922D Robot Vacuum Cleaner
    BZOJ1767 [CEOI2009]harbingers
    树的直径学习笔记
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/10542783.html
Copyright © 2011-2022 走看看