衡阳八中 1856 数论 C(n,m) % p

来源:互联网 发布:毒品网络 百度云 编辑:程序博客网 时间:2024/06/01 22:49

题目:http://61.187.179.132:8080/JudgeOnline/status

题目大意:由n1m个零组成的字符串,要求对于任意位置k都有前k个字符中1的个数大于等于0的个数。(1 <= m <= n<= 1000000) 最后输出结果MOD  20100403

考点:C(n,m) mod p(其中nm很大,p不大)

思路:题目可转化为从矩阵中(00)点走到(nm)点的路径总数减去从(1-1)点走到(nm)的路径总数。(规定向上走为1,向下走为0),然后利用组合取模求解

提交情况:wronganswer  6

                    Time limiterror 4   原因  数组开小了,应该是n+m的大小,我开成了n

经验: 注意数组含义,定义适当大小的数组。 

收获:  阶乘中素因子的个数

ACcode:

#include <stdio.h>

#include <string.h>

 

#define MAXN 2000100

#define P 20100403

#define I64 __int64

 

inta[MAXN], boo[MAXN];

I64 prime[MAXN], count;

voidGet_Prime(I64 n){

   I64 i, j;

   count = 0;

   memset(boo, 0, sizeof(boo));

   for(i = 2; i <= n; i++){

      if(!boo[i]) prime[count ++] =i;

      for(j = 0; j <count; j ++){

         if(prime[j] * i > n)break;

          boo[prime[j] * i] = 1;

          if(i % prime[j] == 0) break;

      }

   }

}

 

voidget_factor(I64 n, I64 m){

   I64 i, data1, data2, data3;

   memset(a, 0, sizeof(a));

   for(i = 0; i <count; i ++){

      data1 = n, data2 = m, data3 = n - m;

      while(data1 || data2 ||data3){

          a[i] += data1/prime[i] - data2/prime[i] -data3/prime[i];

          data1 /= prime[i];

          data2 /= prime[i];

          data3 /= prime[i];

      }

   }

}

 

I64 multi(I64 x, I64 y){

   I64 ans = 0;

   while(y){

      if(y & 1) ans =(ans + x) % P;

      x = (x + x) % P;

      y >>= 1;

   }

   return ans;

}

 

I64 POWER(I64 x, I64 y){

   I64 ans = 1;

   while(y){

      if(y & 1) ans =multi(ans, x);

      x = multi(x, x);

      y >>= 1;

   }

   return ans;

}

 

I64 Get_combination(I64 n, I64 m){

   I64 i, ans = 1;

   get_factor(n, m);

   for(i = 0; i <count; i ++)

      ans = multi(ans, POWER(prime[i], a[i]));

   return ans;

}

 

int main(){

   I64 n, m;

   while(~scanf("%I64d %I64d", &n,&m)){

      Get_Prime(n + m);

      I64 ans1 = Get_combination(n + m, n);

      I64 ans2 = Get_combination(n + m, n + 1);

      printf("%I64d\n", (ans1 + P -ans2) % P);

   }

   return 0;

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 c1驾驶证扣26分怎么办 驾驶证被扣6分后怎么办 c1驾照年审过期一天怎么办 审驾照时间过了怎么办 b2驾驶证扣了分怎么办 a2驾照逾期未审怎么办 中学生只想打游戏不肯学习怎么办 汽车4年未年检怎么办 2年没有验车怎么办 驾驶证过期2年半怎么办 审车逾期一个月怎么办 摩托车驾驶证年审过期一个月怎么办 摩托车驾驶证记满12分怎么办 b2驾驶证扣2分该怎么办 b2扣6分以上怎么办 审驾照晚了3天怎么办 考驾驶证3年到期怎么办 学习驾驶证明过期了怎么办 a2扣了12分怎么办 驾照a2扣6分了怎么办 a2本扣9分怎么办 驾驶证分扣3分怎么办? 异地换驾驶证没有居住证怎么办 b2开c1车扣分怎么办 驾照五次没考过怎么办 大车行驶证丢了怎么办 车的产权证丢了怎么办 车子行驶证掉了怎么办 定期的存折丢了怎么办 存折密码输错6次怎么办 营业执照原件丢失怎么办怎么注销 违章扣了14分怎么办 c1驾驶本过期了怎么办 考驾照没带身份证怎么办 上海扣满12分怎么办 美宝旅行证丢失怎么办 汽车证件全丢了怎么办 车的行驶本丢了怎么办 车和行驶证丢了怎么办 考驾照人在外地怎么办 外地考驾照没有居住证怎么办