HNU 13101 The Triangle Division of the Convex Polygon 卡特兰数第n项%m(m可为非素数
2014-11-29 15:16
267 查看
题目链接:点击打开链接
首先要n-=2,然后就是一个卡特兰数了。
上一题用的是 h(n) = h(n-1) * (4n-2)/(n+1);
这题用的是 h(n) = (2n)! * n! / (n+1)!;
然后对阶乘分解质因数:
点击打开链接
分解完了直接快速幂。
首先要n-=2,然后就是一个卡特兰数了。
上一题用的是 h(n) = h(n-1) * (4n-2)/(n+1);
这题用的是 h(n) = (2n)! * n! / (n+1)!;
然后对阶乘分解质因数:
点击打开链接
分解完了直接快速幂。
#include<stdio.h> #include<iostream> #include<cmath> #include<cstring> using namespace std; #define int __int64 const int N = 100000; int prime ,primenum;//有primenum个素数 math.h void PRIME(int Max_Prime){ primenum=0; prime[primenum++]=2; for(int i=3;i<=Max_Prime;i+=2) for(int j=0;j<primenum;j++) if(i%prime[j]==0)break; else if(prime[j]>sqrt((double)i) || j==primenum-1) { prime[primenum++]=i; break; } } int n, m; void mul(int &x, int y){ x *= y; if(x >= m) x %= m; else if(x<0) x = x%m+m; } int Pow(int x, int y){ int ans = 1; while(y){ if(y&1) mul(ans, x); mul(x, x); y >>= 1; } return ans; } int D ; void work1(int x){ for(int i = 0; prime[i]<=x; i++){ D[i] = 0; for(int j = prime[i]; j <= x; j*=prime[i]) D[i] += x/j; } } void work2(int x){ for(int i = 0; prime[i]<=x; i++) for(int j = prime[i]; j <= x; j*=prime[i]) D[i] -= x/j; } void debug(){ for(int i = 0; i<primenum; i++) if(D[i])printf("[%d,%d]\n", prime[i],D[i]);puts(""); } int work(){ if(m==1)return 0; if(n==1)return 1; int res = 1; //f = 2n!/n!/(n+1)!; work1(2*n); work2(n); work2(n+1); for(int i = 0; prime[i] <= 2*n; i++) if(D[i]) mul(res, Pow(prime[i],D[i])); return res; } #undef int int main() { PRIME(1000000); while(cin>>n>>m){ n-=2; cout<< work()%m <<endl; } return 0; }
相关文章推荐
- HNU 13101 The Triangle Division of the Convex Polygon 组合数的因式分解求法
- HOJ 13101 The Triangle Division of the Convex Polygon(数论求卡特兰数(模不为素数))
- hunnu11562:The Triangle Division of the Convex Polygon(第n个卡特兰数取模)
- HUNAN 11562 The Triangle Division of the Convex Polygon(大卡特兰数)
- The Triangle Division of the Convex Polygon
- IP地址的划分 -- The division of the IP address
- The centre of polygon (多边形重心)
- The Number of Triangles Formed by Intersecting Diagonals of a Regular Polygon
- division of labor for the android Kernel/BSP development .
- FZU 1775 Counting Binary Trees 卡特兰数前n项和%m(m可为非素数
- The Number of Triangles Formed by Intersecting Diagonals of a Regular Polygon
- The centre of polygon tzc
- Determining if a point lies on the interior of a polygon
- The Area of an Arbitrary Triangle-任意三角形的面积
- Uvalive 6471 Triangle Count Sequences of Polygon Triangulations 多边形三角剖分 递归思想
- hnu 12432 Bottom of the sea#矩形交
- Book Review of Dynamics of Software Development--Remember the triangle:features, resources, times
- exactly the kind of division of tasks that Gulp.js is built on
- a fast algorithm to compute the area of a polygon
- hoj 2879 The triangle of Eulerian numbers