傳送門
前置知識:算術基本定理:任何乙個大於1的自然數 n,如果n不為質數,那麼n可以唯一分解成有限個質數的乘積n=p1^a1*p2^a2*p3^a3......pn^an,這裡p1
題解:由算術基本定理,我們可以將x拆成若干個質數相乘,那麼就可以將這些最小質因子進行排列組合相乘得到的遞增序列,滿足了題意要求因子後一項整除前一項,則其最大長度是每一項的指數之和(a1+a2....+an),方案數是(a1+a2....+an)!/(a1!*a2!*....*an!)(相同的數調換位置排列結果一樣)
最小質因子可以用線性篩,資料範圍是2^20次方,最大的排列數是20!在long long 範圍以內,可以用longlong儲存。
#includeusingnamespace
std;
const
int n = 1050005
;int
prime[n],st[n],min_p[n],sum[n];
intcnt;
void get_prime(int
n)
for(int j=0;j)
if(i%prime[j]==0)break
; }
}}int
main()
k++;
}cout"}
return0;
}
1295 X的因子鏈
輸入正整數 x 求 x 的大於 1 的因子組成的滿足任意前一項都能整除後一項的嚴格遞增序列的最大長度,以及滿足最大長度的序列的個數。輸入包含多組資料,每組資料佔一行,包含乙個正整數表示 x 對於每組資料,輸出序列的最大長度以及滿足最大長度的序列的個數。每個結果佔一行。資料範圍 1 x 2 輸入樣例 ...
AcWing 1295 X的因子鏈
輸入正整數 x,求 x 的大於 1 的因子組成的滿足任意前一項都能整除後一項的嚴格遞增序列的最大長度,以及滿足最大長度的序列的個數。輸入格式 輸入包含多組資料,每組資料佔一行,包含乙個正整數表示 x。輸出格式 對於每組資料,輸出序列的最大長度以及滿足最大長度的序列的個數。每個結果佔一行。資料範圍 1...
線性篩高階 三 求N的因子個數
演算法思路 首先先完成線性篩函式,然後改寫 define max n 1000 int prime max n 5 void init for int j 1 j prime 0 j return 然後我們進行 公升級 那對於乙個合數能寫出兩個不互素因數積的情況呢 例如 12 2 6 2 和 6 不...