given a positive integer x, an x-factor chain of length m is a sequence of integers,
1 =x0, x1, x2, …, xm =x
satisfying
xi< xi+1 and xi | xi+1 where a | b means a perfectly divides into b.
now we are interested in the maximum length of x-factor chains and the number of chains of such length.
input
the input consists of several test cases. each contains a positive integer x (x ≤ 220).
output
for each test case, output the maximum length and the number of such x-factors chains.
sample input
234sample output10100
1 1題目大意:乙個整數n,然後分解它的因子從x0到xm,其中x(k+1)>xk且xk整除x(k+1),即x(k+1)%xk==0,讓你求出這樣的序列的最長長度,當然這個長度你可以理解為下標m(從0開始的),也可以理解成所有的因子不包含1的個數,然後輸出的下乙個數是存在長度為m這樣的因子序列有幾個;1 12 1
2 24 6
分析:因子問題,可以想到向質因子考慮,因為任何乙個整數都是由其質因子相乘得到的,因此可以對整數分解質因子,對於最長鏈的長度可以這樣求:拿樣例n=100來說,它的質因子有1,2,5,其中2有兩個,5有2個(這點很重要),它的題目要求最長鏈的因子都是由前一項乘以乙個質因子得到的:
舉個栗子:100存在這樣乙個符合題意的樣例 1 ,2 ,4 ,20 ,100,然後對其分解變成1,2,2*2,2*2*5,2*2*5*5,這樣就可以明顯看出我上面的那一句是什麼意思,20>4,20%4==0,那麼20,相對於4就是4乘以乙個質因子5得到的20,最終就是將所有的質因子相乘得到整數n(這樣才是最長的,2最多有2個,5最多也有2個,因此答案不可能出現3個2或者3個5相乘的因子的情況),因此最長的鏈的長度就是所有質因子個數的相加的和;
然後再求最長鏈的個數問題,在這裡我是參考了這位博主的思路來理解的:傳送
然後就是多重集全排列的問題了
綜上:其組合數為n!/ (n1! *n2! * n3! *nm!)
#include #include #include #include #include #include using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
const int n=1e4;
int prime[n];
int factor(int n)
}if(n>1) prime[++tot]++;
return tot;
}ll sum(int v)
ll sum1(ll num,int u)
return base;
}int main()
}
多重排列和多重組合
比如有這樣乙個例子 helloo這個單詞字母排列有多少種方案呢?我們學過無重排列,那我們是不是可以轉化呢?我們把 l o 分別加上下標1,2,那麼就有6個不同的字母了。全排列的個數為6!然後我們在除以重複數字的冗餘度即 6!2 2!這就是多重排列的方案數了。那我們來擴充套件一下 二項式定理 a b ...
poj 3421 素因子個數和
題意 無法理解xi xi 1 and xi xi 1 where a b means a perfectly divides into b.這句話的意思。解析 網上的解析,求下面這些數,直接寫求下面這些數的 了。n可以分解成質因子的乘積。n p1 a1 p2 a2 p3 a2.pn an.最大長度就...
POJ 3421分解質因數
x factor chains time limit 1000ms memory limit 65536k total submissions 7375 accepted 2340 description given a positive integer x,an x factor chain of...