【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理
因为999911659是个素数
欧拉定理得
然后指数上中国剩余定理
然后分别lucas定理就好了
注意G==P的时候的特判
- /* http://www.cnblogs.com/karl07/ */
- #include <cstdlib>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- #define ll long long
- const ll P=;
- const ll p1[] = {, , , , };
- const ll N=;
- ll g,n,cnt=;
- ll fac[N+],ifac[N+];
- ll p[N],ans[];
- ll Q_pow(ll a,ll b,ll p){
- ll ans=;
- while (b){
- if (b&) ans=ans*a%p;
- a=a*a%p;
- b=(b>>);
- }
- return ans;
- }
- void FAC(ll p){
- ifac[]=fac[]=;
- for (int i=;i<=N;i++) fac[i]=fac[i-]*i%p,ifac[i]=Q_pow(fac[i],p-,p);
- }
- ll C(ll n,ll m,ll p){
- if (m>n) return ;
- return fac[n]*ifac[m]%p*ifac[n-m]%p;
- }
- ll lucas(ll n,ll m,ll p){
- if (m==) return ;
- return lucas(n/p,m/p,p)*C(n%p,m%p,p)%p;
- }
- void fj(ll x){
- for (int i=;i*i<=x;i++){
- if (x%i==){
- p[++cnt]=i;
- if (i*i!=x) p[++cnt]=n/i;
- }
- }
- }
- ll gcd(ll a,ll b){return b ? gcd(b,a%b) : a;}
- void ex_gcd(ll a,ll b,ll &x,ll &y){
- if (b==){x=;y=;return;}
- ex_gcd(b,a%b,y,x);
- y-=x*(a/b);
- }
- ll China(){
- ll a0=ans[],p0=p1[];
- for (int i=;i<=;i++){
- ll x,y,g=gcd(p0,p1[i]);
- ex_gcd(p0,p1[i],x,y);
- x=(x*(ans[i]-a0)%p1[i]+p1[i])%p1[i];
- a0=a0+x*p0;
- p0=p0/g*p1[i];
- }
- return a0;
- }
- void work(){
- for(int i=;i<=;i++){
- FAC(p1[i]);
- for (int j=;j<=cnt;j++){
- ans[i]=(ans[i]+lucas(n,n/p[j],p1[i]))%p1[i];
- }
- }
- printf("%lld\n",Q_pow(g,China(),P));
- }
- int main(){
- scanf("%lld%lld",&n,&g);
- if (g==P) {puts(""); return ;}
- fj(n);
- work();
- return ;
- }
各种zz的错误。。调了一年
而且跑的巨慢无比。。
【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理的更多相关文章
- BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】
题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...
- bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】
首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...
- bzoj1951 [Sdoi2010]古代猪文 ——数论综合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意就是要求 G^( ∑(k|n) C(n,k) ) % p,用费马小定理处理指数,卢 ...
- 【BZOJ1951】古代猪文(CRT,卢卡斯定理)
[BZOJ1951]古代猪文(CRT,卢卡斯定理) 题面 BZOJ 洛谷 题解 要求什么很显然吧... \[Ans=G^{\sum_{k|N}{C_N^k}}\] 给定的模数是一个质数,要求解的东西相 ...
- BZOJ 1951: [Sdoi2010]古代猪文( 数论 )
显然答案是G^∑C(d,N)(d|N).O(N^0.5)枚举N的约数.取模的数999911659是质数, 考虑欧拉定理a^phi(p)=1(mod p)(a与p互质), 那么a^t mod p = a ...
- BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论
原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...
- BZOJ1951[SDOI2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
随机推荐
- 蓝桥杯 基础练习 BASIC-24 龟兔赛跑预测
基础练习 龟兔赛跑预测 时间限制:1.0s 内存限制:512.0MB 问题描述 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑.于是世界上各 ...
- win10/server2019 系统安装 详解
https://www.microsoft.com/zh-cn/software-download/windows10 https://go.microsoft.com/fwlink/?LinkId= ...
- Ueditor/自定义配置
UEditor除 了具有轻量.可定制等优点外,还始终将优化编辑操作.提升用户体验摆在了很重要的位置.在这一点上,除了对编辑器功能.性能.实现细节等不断地改进和追求 创新之外,众多灵活而人性化的自定义配 ...
- linux设置支持中文
LANG="zh_CN.UTF-8" #LANG="zh_CN.GB18030" #LANG=en_US.UTF-8 LANGUAGE="zh_CN. ...
- python 函数相关定义
1.为什么要使用函数? 减少代码的冗余 2.函数先定义后使用(相当于变量一样先定义后使用) 3.函数的分类: 内置函数:python解释器自带的,直接拿来用就行了 自定义函数:根据自己的需求自己定义的 ...
- Javascript ——Navigator对象
见 <Javascript 高级程序设计 第二版> P172 一.检测插件: 1.获取所有插件名称: 非IE浏览器:根据plugins数组, function getplugins() { ...
- 11-24网页基础--Js框架及学习思路
第一部分 基本语法: 1.数据类型(字符串.小数.整数.布尔.时间日期)var s="3.14" var n=parsefloat(s) s+=5;var s="abc3 ...
- Android源码中添加C可执行程序
在Android源码中添加C/CPP可执行程序一般保存在external目录中 下面是每个文件的内容 ①add.c #include "add.h" int add (int a, ...
- 用sass的minix定义一些代码片段,且可传参数
/** *@module功能 *@description生成全屏方法 *@method fullscreen *@version 1.7.0 *@param{Integer}$z-index 指定层叠 ...
- Java判断字符串是否包含数字
public static boolean isContainNumber(String company) { Pattern p = Pattern.compile("[0-9]" ...