反素数(luogu 1463)
生活随笔
收集整理的這篇文章主要介紹了
反素数(luogu 1463)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述
對于任何正整數(shù)x,其約數(shù)的個數(shù)記作g(x)。例如g(1)=1、g(6)=4。
如果某個正整數(shù)x滿足:g(x)>g(i) 0<i<x,則稱x為反質(zhì)數(shù)。例如,整數(shù)1,2,4,6等都是反質(zhì)數(shù)。
現(xiàn)在給定一個數(shù)N,你能求出不超過N的最大的反質(zhì)數(shù)么?
輸入輸出格式
輸入格式:
?
一個數(shù)N(1<=N<=2,000,000,000)。
?
輸出格式:
?
不超過N的最大的反質(zhì)數(shù)。
?
輸入輸出樣例
輸入樣例1000 輸出樣例
840
思路:
找到反質(zhì)數(shù)的規(guī)律,滿足以下三個引理即可
?
引理 1 :1 - N 中最大的反素數(shù),就是1 - N中約數(shù)最多中最小的一個 .
?
引理 2 :1 - N 中任何數(shù)的不同質(zhì)因子都不會超過 10 個,且所有質(zhì)因子總和不超過 30 .
( reason: 231>2*109?)
?
引理 3 : x 的質(zhì)因子是連續(xù)的若干個最小的質(zhì)數(shù),并且指數(shù)單調(diào)遞減
?
都是很顯然的結(jié)論(如果讀懂了題意)
?
code
#include<stdio.h> #include<algorithm> #define ll long long using namespace std; int pri[15]={0,2,3,5,7,11,13,17,19,23,29}; int mxn; ll n,s,ans;void dfs(ll m,int x,int k,int d) {if((k>mxn) || (k==mxn && m<ans)) {ans=m,mxn=k;}int j=0,nk;ll i=m;while(j<d) {++j;if(n/i<pri[x]) break;nk=k*(j+1);i=i*pri[x];if(i<=n) dfs(i,x+1,nk,j);}}int main() {scanf("%lld",&n);dfs(1,1,1,11);printf("%lld",ans);return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/qseer/p/9780173.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的反素数(luogu 1463)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘下载的东西不能用怎么回事 U盘下的文
- 下一篇: shell中获取本机ip地址