AcWing 1295. X的因子鏈
輸入正整數 X,求 X 的大于 1 的因子組成的滿足任意前一項都能整除后一項的嚴格遞增序列的最大長度,以及滿足最大長度的序列的個數,
輸入格式
輸入包含多組資料,每組資料占一行,包含一個正整數表示 X,
輸出格式
對于每組資料,輸出序列的最大長度以及滿足最大長度的序列的個數,
每個結果占一行,
資料范圍
1≤X≤220
輸入樣例:
2
3
4
10
100
輸出樣例:
1 1
1 1
2 1
2 2
4 6
這道題其實我剛開始一直沒有理解明白,后來仔細看了y總的視頻,發現其實陳述句的錯誤讓我對這題產生了誤解——(任意前一項都能整除后一項的嚴格遞增序列)
這句話應該改成任意后一項都能整除前一項的嚴格遞增序列,
然后這樣去理解就很輕松了,我覺得y總的方法確實很麻煩,在理解題意的基礎上其實我明白序列的長度是質因子的個數,然后我們序列的種類是Cx1n1+Cx2n2+Cx3n3+Cx4n4+Cx5n5+Cx6n6
然后我們開始寫一下代碼,
res是質因數的個數,ans是res的階乘,然后cnt是每個質因數的階乘,
最終實作這個式子
Cx1n1+Cx2n2+Cx3n3+Cx4n4+Cx5n5+……+Cxnxn
代碼如下:
#include<iostream>
using namespace std;
const int N=1e5+10;
int main(void)
{
int n;
int cnt=0;
while(~scanf("%d",&n))
{
int res=0;//質因數的個數
int t=n;
long long cnt=1,ans=1;
for(int i=2;i<=n/i;i++)
{
int d=0;
while(n%i==0)
{
d++;
n/=i;
cnt*=d;
}
res+=d;
}
if(n>1)
res++;
for(int i=1;i<=res;i++)
ans*=i;
cout<<res<<" "<<ans/cnt<<endl;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266751.html
標籤:其他
上一篇:人臉檢測之——學習
下一篇:js 沙箱
