P1463-[POI2002][HAOI2007]反素数【约数,数论】
生活随笔
收集整理的這篇文章主要介紹了
P1463-[POI2002][HAOI2007]反素数【约数,数论】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正題
評測記錄:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1463
題目大意
求1~n1~n中最大的一個約數(shù)個數(shù)比前面的所有數(shù)都要多的數(shù)。
解題思路
首先根據(jù)數(shù)據(jù)我們可以得知這個數(shù)的質因子不超過10個。而且這個數(shù)的質因子是連續(xù)若干個最小的質數(shù),而且指數(shù)單調遞增,因為這樣的數(shù)可以保證每些質因子組成的他的約數(shù)都是最小的也是最多的。
所以我們就可以用搜索找出答案
code
#include<cstdio> #include<algorithm> using namespace std; const long long prime[12]={2,3,5,7,11,13,17,19,23,29}; long long n,mark,maxs; long long power(long long a,long long b)//快速冪 {long long sum=1;while(b){if(b&1) sum*=a;a*=a;b>>=1;}return sum; } void dfs(long long x,long long sum,long long maxc,long long num) //深搜,參數(shù)分別表示第幾個質數(shù),目前質數(shù)乘積,目前最大指數(shù),目前約數(shù)個數(shù) {if(sum>n) return;if(num>maxs||(num==maxs&&sum<mark)){maxs=num;mark=sum;}//統(tǒng)計答案if(x>=12) return;long long v=0,pows;while((pows=power(prime[x],v))<=n&&v<=maxc)//沒有爆炸而且指數(shù)遞增{dfs(x+1,sum*pows,v,num*(v+1));//下一個v++;} } int main() {scanf("%lld",&n);dfs(0,1,32,1);//開始搜索printf("%lld",mark); }總結
以上是生活随笔為你收集整理的P1463-[POI2002][HAOI2007]反素数【约数,数论】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo 开源蓝心大模型 7B,提供一亿
- 下一篇: P2261-[CQOI2007]余数求和