POJ 3421 X-factor Chains | 数论

题意:

给一个x,求最长的排列满足开头是1,结尾是x,前一个数是后一个数的因子

输出长度和这样序列的个数



题解:

把x分解质因数,质因数个数就是答案,接下来考虑怎么求个数

显然这是一个可重集合全排列问题,设有n个元素

答案就是n!/每个元素出现次数的阶乘

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 typedef long long ll;
 5 #define N 2000
 6 using namespace std;
 7 int prime[N],n,cnt[N],pcnt,sum;
 8 ll jc[21];
 9 bool isp[N];
10 void init()
11 {
12     memset(isp,1,sizeof(isp));
13     isp[1]=0;
14     for (int i=2;i<N;i++)
15     {
16     if (isp[i]==1)
17         prime[++pcnt]=i;
18     for (int j=1;j<=pcnt && i*prime[j]<N;j++)
19     {
20         isp[i*prime[j]]=0;
21         if (i%prime[j]==0) break;
22     }
23     }
24 }
25 int main()
26 {
27     jc[0]=1;
28     for (int i=1;i<=20;i++)
29     jc[i]=jc[i-1]*i;
30     init();
31     while (scanf("%d",&n)!=EOF)
32     {
33     ll ans=0;
34     memset(cnt,0,sizeof(cnt));
35     sum=0;
36     for (int i=1;i<=pcnt;i++)
37     {
38         if (n==1) break;
39         while (n%prime[i]==0)
40         n/=prime[i],cnt[i]++,sum++;
41     }
42     if (n>1)
43         sum++;
44     ans=jc[sum];
45     for (int i=1;i<=pcnt;i++)
46         ans/=jc[cnt[i]];
47     printf("%d %lld\n",sum,ans);
48     }
49     return 0;
50 }
时间: 2024-10-24 10:51:34

POJ 3421 X-factor Chains | 数论的相关文章

poj 2689 Prime Distance 【数论】【筛法求素数】

题目链接:传送门 题目大意: 给你L和R两组数,L和R的范围是2^32,其间隔(即R-L最大为1,000,000.) .让你求出L和R之间素数的最大间隔和最小的间隔. 比如 2 17.之间的最小素数间隔是2 3,最大的素数间隔是11 17. 要是直接进行一个2^32次方筛法然后在判断是会T的. 我们这样来想,筛法求素数的原理是什么: /**vis数组标记为0则说明是素数*/ int vis[10005]; void getPrimevis(int n) { int m=sqrt(n+0.5);

挑战程序设计竞赛2.6习题:X-factor Chains POJ - 3421

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 ch

POJ 3421 X-factor Chains

这条链依次乘一个因子.因为n<2^20,sqrt(n)分解因子,相同的因子相对顺序取一个. #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<queue> #include<vector> #include<stack> #include<vector> #include<map> #

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

题意:一条整数链,要求相邻两数前一个整除后一个.给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量. 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以某素因子,所以链的数量即为这些因子不全相异的全排列数:A!/(a1!a2!a3!..) #include <cstdio> #include <cmath> #include <iostream> using namespace std; typedef long long

POJ 3421 素数+组合数学

X-factor Chains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5741   Accepted: 1808 Description 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 

ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德

POJ 1061 青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰

POJ 3048 Max Factor (筛素数)

Description To improve the organization of his farm, Farmer John labels each of his N (1 <= N <= 5,000) cows with a distinct serial number in the range 1..20,000. Unfortunately, he is unaware that the cows interpret some serial numbers as better tha

【poj 1006】Biorhythms(数论--中国剩余定理 模版题){附【转】中国剩余定理 }

题意: 有 解法:中国剩余定理.定义为有 k 对关系:P % ai = bi,其中 ai 两两之间互质.(而两两之间不互质就是把原来的关系式化为:P = bi (mod ai) →  ai * x + bi = P,用拓展欧几里德求解同余方程组了.)    而 ai 两两互质时,可知道 a2*a3*...*ak = 1 (mod a1)  和  a1*a3*...*ak = 1 (mod a2) 等关系.那么想使 P % ai = bi ,就是要式子两边同乘 bi 了. 下面是转载的了~ 原博:

POJ 2800 Joseph’s Problem 数论找规律

Description 求 Input 两个整数n和k(1<=n,k<=1e9) Output 输出 Sample Input 5 3 Sample Output 7 暴力超时,这样就打下表找下余数的规律.输入100,27,一下子就可以看出来,倒着的看,是一段一段的等差序列. 例如100 25 除数 1    2    3    4    5    6    7    8    9     10     11    12   13 14  15  ......25   26........ 商