首页 > 代码库 > XidianOJ 1032 找规律Ⅱ
XidianOJ 1032 找规律Ⅱ
题目描述
现有数阵如下:
求这个数阵的第n行m列是多少(行列标号从1开始)
结果对10007取模
输入
多组数据,每组数据一行,包含两个整数n,m(1<=n<=m<=10^18)
输出
每组数据输出一行,为数阵中第n行m列对10007取模后的值。
--正文
C(m,n) % p
组合数取模问题
PS:找规律真是恶心
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; LL n,m; LL p = 10007; LL quick_mod(LL a,LL b){ LL ans = 1; a %= p; while (b){ if (b & 1){ ans = ans * a % p; } b >>= 1; a = a * a % p; } return ans; } LL C(LL n,LL m){ if (m > n) return 0; LL ans = 1; LL i; for (i=1;i<=m;i++){ LL a = (n + i - m) % p; LL b = i % p; ans = ans * (a * quick_mod(b,p-2) % p) % p; } return ans; } LL lucas(LL n,LL m){ if (m == 0) return 1; return C(n % p,m % p) * lucas(n / p,m / p) % p; } int main(){ while (scanf("%lld %lld",&n,&m) != EOF){ printf("%d\n",lucas(m,n)); } return 0; }
XidianOJ 1032 找规律Ⅱ
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。