当前位置: 首页 > news >正文

【洛谷 P2480】 [SDOI2010]古代猪文(中国剩余定理,Lucas定理)

题目链接

这题出的有点nb,PKU: Pig Kingdom University , NOIP: National Olympics in Informatic of Pigs。。。
题意:求\(G^{\sum_{d|n}C_n^d}mod\ 999911659\)
根据费马小定理的推论,题目可以转化为求\(G^{\sum_{d|n}C_n^dmod999911658}mod\ 999911659\)
\(999911658\)分解质因数可得\(999911658=2\times3\times4679\times35617\)
枚举这4个数,再枚举\(n\)的因子\(d\),预处理阶乘和逆元,用Lucas定理求出\(\sum_{d|n}C_n^d\),最后用中国剩余定理合并就行了。

#include <cstdio>
#include <cstdlib>
#include <cmath>
typedef long long ll;
const int MAXN = 40000;  // The Biggest Prime
const int MOD = 999911659;
const int MO = 999911658;
const int prime[6] = {233, 2, 3, 4679, 35617};
const int M = 4;
int n, q;
int fact[MAXN], inv[MAXN], a[M + 2], t[M + 2];
int C(int n, int m, int mod){
    if(n < m) return 0;
    return fact[n] * inv[fact[m]] % mod * inv[fact[n - m]] % mod;
}
int Lucas(int n, int m, int mod){
    if(!m) return 1;
    return C(n % mod, m % mod, mod) * Lucas(n / mod, m / mod, mod) % mod;
}
int Pow(int q, int k, int mod){
    int ans = 1;
    while(k){
      if(k & 1) ans = ((long long)ans * q) % mod;
      k >>= 1;
      q = (long long)q * q % mod;
    }
    return ans;
}
int Crt(int a[]){
    int ans = 0;
    for(int i = 1; i <= M; ++i){
       int tmp = MOD / prime[i];
       ans = ((long long)ans + (long long)a[i] * tmp % MO * Pow(tmp, prime[i] - 2, prime[i])) % MO;
    }
    return ans;
}
int main(){
    scanf("%d%d", &n, &q);
    if(q % MOD == 0){
      printf("0\n");
      return 0;
    }
    inv[1] = 1;
    fact[1] = 1;
    fact[0] = 1;
    for(int i = 1; i <= M; ++i){
       for(int j = 2; j <= prime[i]; ++j)
          fact[j] = (fact[j - 1] * j) % prime[i], inv[j] = (prime[i] - prime[i] / j) * inv[prime[i] % j] % prime[i];
       for(int d = 1; d * d <= n; ++d){
          if(n % d) continue;
          a[i] = (a[i] + Lucas(n, d, prime[i])) % prime[i];
          if(d * d == n) continue;
          a[i] = (a[i] + Lucas(n, n / d, prime[i])) % prime[i];
       }
    }
    printf("%d\n", Pow(q, Crt(a), MOD));
    return 0;
}

转载于:https://www.cnblogs.com/Qihoo360/p/9468584.html

相关文章:

  • heroku之python项目
  • K8S集群中部署jenkins
  • 支配vue框架初阶项目之博客网站-单页-登陆和注册的跳转
  • linux 挂在硬盘,并自动重启挂载
  • mongodb查询数据库中某个字段中的值包含某个字符串的方法
  • Go并发编程实战 第2版 PDF (中文版带书签)
  • html2canvas.js 图片跨域 生成图片模糊 图片偏移 高清图的问题总结
  • 人生苦短我用python(03),如何调试python程序
  • Django 框架07: 状态保持
  • 分类解析
  • 直播中 BarrageRenderer 弹幕的显示
  • linux学习之路:2.基本指令(2)
  • Discuz 配置tag标签页面url静态化(nginx)
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • 机器学习 vs. 深度学习
  • ----------
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • android图片蒙层
  • CSS 专业技巧
  • ES6系列(二)变量的解构赋值
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • javascript面向对象之创建对象
  • java中的hashCode
  • js继承的实现方法
  • Material Design
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue的全局变量和全局拦截请求器
  • vue中实现单选
  • 记一次用 NodeJs 实现模拟登录的思路
  • 两列自适应布局方案整理
  • 容器服务kubernetes弹性伸缩高级用法
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 怎么把视频里的音乐提取出来
  • Prometheus VS InfluxDB
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #git 撤消对文件的更改
  • $.ajax()方法详解
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (c语言)strcpy函数用法
  • (python)数据结构---字典
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (转)Oracle存储过程编写经验和优化措施
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net 6.0 处理跨域的方式
  • .NET MVC 验证码
  • .NET程序员迈向卓越的必由之路
  • /dev/sda2 is mounted; will not make a filesystem here!
  • ::什么意思
  • @html.ActionLink的几种参数格式
  • @property括号内属性讲解
  • [22]. 括号生成
  • [ActionScript][AS3]小小笔记