码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3421 X-factor Chains (因式分解+排列组合)

时间:2017-08-22 00:40:22      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:eof   play   tco   name   factor   long   2-2   printf   names   

题意:一条整数链,要求相邻两数前一个整除后一个。给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量。

类型:因式分解+排列组合

算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以某素因子,所以链的数量即为这些因子不全相异的全排列数:A!/(a1!a2!a3!..)

#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;

typedef long long LL;
int p[22], a[22];
int cnt;

int main() {
	int n, i, j;
	while (scanf("%d", &n) != EOF) {
		cnt = 0;
		for (i = 2; i <= sqrt(n); ++i) { // 质因子分解
			if (n % i == 0) {
				p[cnt] = i;
				n /= i;
				a[cnt++] = 1;
			}
			while (n % i == 0) {
				a[cnt - 1]++;
				n /= i;
			}
		}
		if (n > 1) { // 注意点,容易忘记
			p[cnt] = n;
			a[cnt++] = 1;
		}
		LL ans = 1;
		int A = 0;
		for (i = 0; i < cnt; ++i) {
			A += a[i];
		}
		for (i = a[0] + 1; i <= A; ++i) { // 提前除以a[0]!
			ans *= i;
		}
		for (i = 1; i < cnt; ++i) {
			for (j = 2; j <= a[i]; ++j) {
				ans /= j;
			}
		}
		printf("%d %lld\n", A, ans);
	}
	return 0;
}

POJ 3421 X-factor Chains (因式分解+排列组合)

标签:eof   play   tco   name   factor   long   2-2   printf   names   

原文地址:http://www.cnblogs.com/demian/p/7407199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!