hdu 3304 Interesting Yang Yui Triangle

Lucas 应用

hdu 3304 Interesting Yang Yui Triangle

lucas 对于c(n,i)把 n,i表示成p进制,对于n(p)某位上的数,如果i(p)对应位上大于它 那么这个数为0 .也就是说每个位置上都只能选择0->n(p).... 所以用乘法  如果问你为0的 那么你可以反面考虑不为0  减一下,另外还有一种方法证明,有点长 应用了 a/p>=b/p+(a-b)/p ,阶乘分解因子 对其后进行讨论 含有的P因子的个数, 见下面代码

View Code
 1 int main()
2 {
3 int i,j;
4 while(cin>>p>>n,p||n)
5 {
6 int ans=1;
7 while(n)
8 {
9 ans=ans*(n%p+1);
10 if(ans>=mood) ans%=mood;
11 n/=p;
12 }
13 cout<<"Case "<<++cas<<": ";
14 cout.width(4);
15 cout.fill('0');
16 cout<<ans<<endl;
17 }
18 }
19
20 ///注意还可以对cnm 阶乘分解因子
21 等价于C(n,m)%p==0求m的个数
22 ?n!/(m!*(n-m)!)%p==0
23 等价于!!!!!N!中p的因子个数等于m!与(n-m)!中的p的因子和
24 即f(n) ==f(m)+f(n-m) //f(n)表示n!所含有的因子数////////////////不是所有都成立的 而是等价于
25 F(n)=n/p+n/(p^2)+....
26 即:
27 n/p+n/p^2+...=m/p+m/p^2+..+(n-m)/p+(n-m)/p^2+... (1)
28 又因为n/p^i>=m/p^i+(n-m)/p^i,/////////////////////////////////////这个不错 a/p>=b/p+(a-b)/p;
29 所以等价于对任意i都有n/p^i =m/p^i+(n-m)/p^i (2)
30 ////接下来就是我的一些规律里面 这个公式等号成立的条件为a%p>=b%p; 才可以 所以P进制上每位都要a较大~~
31 N=n/p^i*p^i+n%p^i(注意这里所有的除法都是整除)
32 (2)两边都乘以p^i
33 n-n%p^i=m-m%p^i+n-m+(n-m)%p^i
34 ?n%p^i-m%p^i=(n-m)%p^i>=0
35 又等价于 m%(p^i)<=n%(p^i) (3)对任意正整数i都成立。(//从2到3这个一步相当的重要,是本题的一个关键点)
36 将n和m分别写成P进制数 n0,n1,n2,n3,n4,.... m0,m1,m2,m3,m4,....
37
38 根据(3)可以由数学归纳法得到,对于任意位上的ni都大于等于mi
39
40  当i=0;显然成立
41 假设i=k成立,当i=k+1时
42 因为m%(p^k)<=n%(p^k)
43 n(k+1)nk..n1=n(k+1)(nk%(p^k))(表示按p进制摆放)
44 所以要保证n%(p^(k+1))>=m%(p^(k+1))
45 必须保证最高位即n(k+1)>=m(k+1)
46
47 即(3)成立的充要条件就是 m0<=n0, m1<=n1 ....
48
49 所以m的可取值个数就是(n0+1)*(n1+1)*(n2+1)......



posted on 2011-10-15 00:10  yaoz10051538  阅读(232)  评论(0编辑  收藏  举报

导航