日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数学】【CF27E】 Number With The Given Amount Of Divisors

發布時間:2025/3/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数学】【CF27E】 Number With The Given Amount Of Divisors 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

Description

給定一個正整數\(n\),輸出最小的整數,滿足這個整數有n個因子

Input

一行一個整數\(n\)

Output

一行一個整數,代表答案。

Hint

\(1~\leq~n~\leq~1000\)。保證答案不超過\(10^{18}\)

Solution

經典題。

引理:

對于一個唯一分解式形如\(x=p_1^{c_1}p_2^{c_2}p_3^{c^3}\cdots p_k^{c_k}\)的數字\(x\),則其因數個數為\(\prod(c_i+1)\)

證明:

考慮乘法原理,第\(i\)項的指數有\(0~\sim~c_i\)\(c_i+1\)種方式,根據唯一分解定理的逆定理,每一項指數不同所得到的數是不同的。于是根據乘法原理,其因數個數為\(\prod(c_i+1)\)

證畢。

定理:

考慮一個因數個數為\(n\)的最小整數\(x\),則它的唯一分解式\(x=p_1^{c_1}p_2^{c_2}p_3^{c^3}\cdots p_k^{c_k}\)中,不妨設\(p_1~<~p_2~<~p_3~<~\cdots~<~p_k\),則一定滿足:\(p_1=2\),且\(\forall ~i~>~1\)\(p_i\)是大于\(p_{i-1}\)的第一個質數,同時\(\forall~i~\in~[1,k)\)\(c_i~\leq~c_{i+1}\)

證明:

1、若\(p\)在質數表上不是連續的,不妨設\(p_i~<~q~<p_{i+1}\),則將\(p_{i+1}\)替換為\(q\)\(x\)會變小,因為\(c_{i+1}\)不變,根據引理,因數個數不變。于是替換為\(q\)答案更優,這與\(x\)是最小的有\(n\)個因子的數矛盾。

2、若\(c_i\)不是單調不升,不妨設\(c_i~<~c_{i+1}\),則將兩指數交換,\(x\)會變小。同上可證因數個數不變。于是交換后答案更優,這與\(x\)是最小的有\(n\)個因子的數矛盾。

證畢。

于是發現答案的唯一分界式,\(2\)一定會出現且指數最大。考慮\(2^{64}\)已經大于\(10^{18}\),所以指數最多為\(64\)。又發現前15個質數連乘的答案已經大于\(10^{18}\),所以質數最多是15個。于是爆搜一下,分別進行一下可行性剪枝和最優性剪枝,即可通過本題。

Code

#include<cstdio> #define rg register #define ci const int #define cl const long longtypedef long long int ll;template <typename T> inline void qr(T &x) {rg char ch=getchar(),lst=' ';while((ch > '9') || (ch < '0')) lst=ch,ch=getchar();while((ch >= '0') && (ch <= '9')) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();if(lst == '-') x=-x; }namespace IO {char buf[120]; }template <typename T> inline void qw(T x,const char aft,const bool pt) {if(x < 0) {x=-x,putchar('-');}rg int top=0;do {IO::buf[++top]=x%10+'0';} while(x/=10);while(top) putchar(IO::buf[top--]);if(pt) putchar(aft); }template <typename T> inline T mmax(const T a,const T b) {return a > b ? a : b;} template <typename T> inline T mmin(const T a,const T b) {return a < b ? a : b;} template <typename T> inline T mabs(const T a) {return a < 0 ? -a : a;}template <typename T> inline void mswap(T &_a,T &_b) {T _temp=_a;_a=_b;_b=_temp; }const int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};int n; ll ans=1000000000000000001;void dfs(ll,int,int,int);int main() {qr(n);dfs(1ll,0,64,1);qw(ans,'\n',true);return 0; }void dfs(ll now,int cur,int p,int cnt) {if(cnt > n) return;if(now <= 0ll) return;if(now > ans) return;if(cur > 15) return;if(cnt == n) {ans=now;return;}for(int i=1;i<=p;++i) {dfs(now*=prime[cur],cur+1,i,cnt*(i+1));} }

Summary

對于一個唯一分解式形如\(x=p_1^{c_1}p_2^{c_2}p_3^{c^3}\cdots p_k^{c_k}\)的數字\(x\),則其因數個數為\(\prod(c_i+1)\)

轉載于:https://www.cnblogs.com/yifusuyi/p/9901071.html

總結

以上是生活随笔為你收集整理的【数学】【CF27E】 Number With The Given Amount Of Divisors的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。