程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> hdu 3304 Interesting Yang Yui Triangle

hdu 3304 Interesting Yang Yui Triangle

編輯:關於C++
hdu 3304 Interesting Yang Yui Triangle

題意:
給出P,N,問第N行的斐波那契數模P不等於0的有多少個?

限制:
P < 1000,N <= 10^9

思路:
lucas定理,
如果:
n = a[k]*p^k + a[k-1]*p^(k-1) + ... + a[1]*p + a[0]
m = b[k]*p^k + b[k-1]*p^(k-1) + ... + b[1]*p + b[0]
則:
C(n,m) = pe(i=0~k,C(a[i],b[i]))%p 其中pe表示連乘符號。


由於n已經確定,所以a[i] (0 <= i <= k)已經確定,所以我們只需要找出每個a[i]有多少種b[i],使得C(a[i],b[i])%P!=0,暴力一遍就可以了。

/*hdu 3304 Interesting Yang Yui Triangle
  題意:
  給出P,N,問第N行的斐波那契數模P不等於0的有多少個?
  限制:
  P < 1000,N <= 10^9
  思路:
  lucas定理,
  如果:
  n = a[k]*p^k + a[k-1]*p^(k-1) + ... + a[1]*p + a[0]
  m = b[k]*p^k + b[k-1]*p^(k-1) + ... + b[1]*p + b[0]
  則:
  C(n,m) = pe(i=0~k,C(a[i],b[i]))%p 其中pe表示連乘符號。

  由於n已經確定,所以a[i] (0 <= i <= k)已經確定,所以我們只需要找出每個a[i]有多少種b[i],使得C(a[i],b[i])%P!=0,暴力一遍就可以了。
 */
#include
#include
using namespace std;
#define LL long long
const int MOD=10000;
const int N=105;
int a[N];
int cnt=0;
int ny[N];
LL inv(LL a,LL m){
	LL p=1,q=0,b=m,c,d;
	while(b>0){
		c=a/b;
		d=a; a=b; b=d%b;
		d=p; p=q; q=d-c*q;
	}
	return p<0?p+m:p;
}

void predo(int p){
	ny[0]=1;
	for(int i=1;i

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved