反素数(luogu 1463)
生活随笔
收集整理的這篇文章主要介紹了
反素数(luogu 1463)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
對于任何正整數x,其約數的個數記作g(x)。例如g(1)=1、g(6)=4。
如果某個正整數x滿足:g(x)>g(i) 0<i<x,則稱x為反質數。例如,整數1,2,4,6等都是反質數。
現在給定一個數N,你能求出不超過N的最大的反質數么?
輸入輸出格式
輸入格式:
?
一個數N(1<=N<=2,000,000,000)。
?
輸出格式:
?
不超過N的最大的反質數。
?
輸入輸出樣例
輸入樣例1000 輸出樣例
840
思路:
找到反質數的規律,滿足以下三個引理即可
?
引理 1 :1 - N 中最大的反素數,就是1 - N中約數最多中最小的一個 .
?
引理 2 :1 - N 中任何數的不同質因子都不會超過 10 個,且所有質因子總和不超過 30 .
( reason: 231>2*109?)
?
引理 3 : x 的質因子是連續的若干個最小的質數,并且指數單調遞減
?
都是很顯然的結論(如果讀懂了題意)
?
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; }?
轉載于:https://www.cnblogs.com/qseer/p/9780173.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的反素数(luogu 1463)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘下载的东西不能用怎么回事 U盘下的文
- 下一篇: 当兵的会一直强调自己是军人吗