輸入正整數 \(x\),求 \(x\) 的大於 \(1\) 的因子組成的滿足任意前一項都能整除後一項的嚴格遞增序列的最大長度,以及滿足最大長度的序列的個數。
輸入包含多組資料,每組資料佔一行,包含乙個正整數表示 \(x\)。
對於每組資料,輸出序列的最大長度以及滿足最大長度的序列的個數。
每個結果佔一行。
資料範圍
\(1≤x≤2^\)
輸入樣例:
234
10100
輸出樣例:1 1
1 12 1
2 24 6
分解質因數,組合先分解質因數:\(a=b_1^\times b_2^\times \dots b_n^\),可知要使其整除序列最長,即第乙個數能整除後面所有數,不妨猜想這個數為 \(b_1,b_2,\dots,b_n\) 中的任意乙個,則可知其最長長度為 \(c_1+c_2+\dots +c_n\),反證,如果不是,由於最大數一定是 \(a\),則第乙個數一定是 \(b_1,b_2,\dots,b_n\) 中的組合,矛盾,故最長長度 \(s\) 即為 \(c_1+c_2+\dots +c_n\),方案數即為組合數:\(c_s^ \times c_^\times \dots \times c_}^\)
// problem: x的因子鏈
// contest: acwing
// url:
// memory limit: 64 mb
// time limit: 1000 ms
// // powered by cp editor (
// %%%skyqwq
#include //#define int long long
#define help
#define pb push_back
#define fi first
#define se second
#define mkp make_pair
using namespace std;
typedef long long ll;
typedef pairpii;
template bool chkmax(t &x, t y)
template bool chkmin(t &x, t y)
template void inline read(t &x)
while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();
x *= f;
}const int n=1000005;
int n,m,a[n],b[n],c[n];
void div()
if(n>1)b[++m]=n,c[m]=1;
}int c(int m,int n)
int main()
return 0;
}
1295 X的因子鏈 線性篩 算術基本定理
傳送門 前置知識 算術基本定理 任何乙個大於1的自然數 n,如果n不為質數,那麼n可以唯一分解成有限個質數的乘積n p1 a1 p2 a2 p3 a3.pn an,這裡p1 題解 由算術基本定理,我們可以將x拆成若干個質數相乘,那麼就可以將這些最小質因子進行排列組合相乘得到的遞增序列,滿足了題意要求...
AcWing 1295 X的因子鏈
輸入正整數 x,求 x 的大於 1 的因子組成的滿足任意前一項都能整除後一項的嚴格遞增序列的最大長度,以及滿足最大長度的序列的個數。輸入格式 輸入包含多組資料,每組資料佔一行,包含乙個正整數表示 x。輸出格式 對於每組資料,輸出序列的最大長度以及滿足最大長度的序列的個數。每個結果佔一行。資料範圍 1...
1574 提高 X 因子鏈
給乙個正整數x,乙個長度為m的x 因子鏈是指這樣乙個序列 x0 1,x1,x2,xm x滿足 xi要求x 因子鏈的最大長度len和長度為len的x 因子鏈的數量。乙個正整數x x 231 一行,兩個整數,分別表示最大長度和該長度鏈的種數。include include include include...