题目链接:古代猪文

  好久没写博客了,这次就先写一篇吧……

  题面好鬼……概括起来就是:给出\(N,G(\leqslant 10^9)\),求:\[G^{\sum_{d|n}\binom{n}{d}} \bmod p \]

  其中\(p=999911659\),是一个质数。

  首先,当\(G\neq p\)时,由欧拉定理可知\[G^x\equiv G^{x\bmod(p-1)}(\bmod p)\]

  然后我们实际上就是要快速计算\[\sum_{d|n}\binom{n}{d} \bmod(p-1)\]

  由于\(p-1\)不是一个质数,我们可以把它给质因数分解了,得到\(p-1=2\times 3\times 4679\times 35617\)

  然后分别在模这些数的情况下用\(Lucas\)定理算出组合数,再中国剩余定理合并。用中国剩余定理的时候注意有多个模数,不要弄混了。

  复习一下\(Lucas\)定理,当\(p\)为质数时,有:\[\binom{a}{b} \equiv \binom{\lfloor \frac{a}{p} \rfloor}{\lfloor \frac{b}{p} \rfloor} \binom{a\bmod p}{b\bmod p}(\bmod p)\]

  中国剩余定理复习:xlightgod的博客Mashirosky的博客

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define mod 999911659
#define maxn 40010 using namespace std;
typedef long long llg; int n,g,pr,pk,pri[4]={2,3,4679,35617};
llg jie[4][maxn],ni[4][maxn],zhi; llg mi(llg a,int b){
llg s=1;
while(b){
if(b&1) s=s*a%pr;
a=a*a%pr; b>>=1;
}
return s;
} llg C(int x,int y){return x<y?0:jie[pk][x]*ni[pk][y]%pr*ni[pk][x-y]%pr;}
llg lucas(int x,int y){
if(!y) return 1; if(x<y) return 0;
return lucas(x/pr,y/pr)*C(x%pr,y%pr)%pr;
} llg hebing(int x,int y){
llg now=0;
for(int k=0;k<4;k++){
pr=pri[k],pk=k;
now+=(mod-1)/pr*mi((mod-1)/pr,pr-2)*lucas(x,y);
now%=mod-1;
}
return now;
} int main(){
File("a");
scanf("%d %d",&n,&g);
if(mod==g){putchar('0');return 0;}
for(int k=0;k<4;k++){
jie[k][0]=1; pr=pri[k]; pk=k;
for(int i=1;i<pr;i++) jie[k][i]=jie[k][i-1]*i%pr;
ni[k][pr-1]=mi(jie[k][pr-1],pr-2);
for(int i=pr-1;i;i--) ni[k][i-1]=ni[k][i]*i%pr;
}
for(int d=1,l=sqrt(n);d<=l;d++)
if(n%d==0){
zhi+=hebing(n,d);
if(n/d!=d) zhi+=hebing(n,n/d);
zhi%=(mod-1);
}
pr=mod; printf("%lld",mi(g,zhi));
return 0;
}

BZOJ 1951 【SDOI2010】 古代猪文的更多相关文章

  1. 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 ...

  2. BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2194  Solved: 919[Submit][Status] ...

  3. 【刷题】BZOJ 1951 [Sdoi2010]古代猪文

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  4. bzoj 1951 [Sdoi2010]古代猪文(数论知识)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1951 [思路] 一道优(e)秀(xin)的数论题. 首先我们要求的是(G^sigma{ ...

  5. bzoj 1951 [Sdoi2010]古代猪文 ——数学综合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 数学综合题. 费马小定理得指数可以%999911658,又发现这个数可以质因数分解.所 ...

  6. bzoj 1951: [Sdoi2010]古代猪文

    #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...

  7. BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)

    题目链接 \(Description\) 给定N,G,求\[G^{\sum_{k|N}C_n^k}\mod\ 999911659\] \(Solution\) 由费马小定理,可以先对次数化简,即求\( ...

  8. bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】

    首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...

  9. BZOJ 1951 [SDOI2010]古代猪文 (组合数学+欧拉降幂+中国剩余定理)

    题目大意:求$G^{\sum_{m|n} C_{n}^{m}}\;mod\;999911659\;$的值$(n,g<=10^{9})$ 并没有想到欧拉定理.. 999911659是一个质数,所以 ...

  10. BZOJ 1951: [Sdoi2010]古代猪文 ExCRT+欧拉定理+Lucas

    欧拉定理不要忘记!! #include <bits/stdc++.h> #define N 100000 #define ll long long #define ull unsigned ...

随机推荐

  1. 【BZOJ2300】[HAOI2011]防线修建 set维护凸包

    [BZOJ2300][HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可 ...

  2. Sql Server 关于列名带中括号"[]"的问题

    1.如果列名为数据库的关键字则自动加上中括号“[]” 例如[level] 2.如果列名中带有特殊符号.[date(a)] 数据存储的过程: 1.在添加数据的时候:要带有中括号,有必要在添加参数的时候不 ...

  3. OC开发_Storyboard——多线程、UIScrollView

    一.多线程 1.主队列:处理多点触控和所有UI操作(不能阻塞.主要同步更新UI) dispatch_queue_t mainQueue = dispatchg_get_main_queue(); // ...

  4. C++ new 长度为0的数组

    在C++中可以new一个长度为0的数组,通过下面的语句: char* p = new char[0]; 指针p中保存一个非NULL的地址,但是你不能够对p指向的内存进行写入,因为p的内存长度为0, 该 ...

  5. Keras-在预训练好网络模型上进行fine-tune

    在深度学习的学习过程中,可能会用到一些已经训练好的模型,比如Alex Net,google Net,VGG,Resnet等,那我们怎样对这些训练好的模型进行fine-tune来提高准确率呢? 参考文章 ...

  6. mysql 约束条件 auto_increment 自动增长起始值 布长 起始偏移量

    我们指定一个字段为自动增长,他默认从1开始自动增长,默认值为1,每次增长为1,步长为1 模糊查询 like % 代表任意个数字符 任意字符长度 查看mysql正在使用变量 show variables ...

  7. sql小知识

    1:查询某一段落内的几条数据,按时间降序. LIMIT 5,10; //检索记录行6-15 2:创建视图,  查询出某些类别的数据,保存在视图中.  || 的优先级高于and ) ); 3:  查询出 ...

  8. word安装楷体gb2312方法。

    1:下载:楷体gb2312.http://www.downza.cn/soft/7732.html 2: 双击安装,将会下载楷体2312  的压缩文件,解压得到楷体2312.ttf. 3:  打开控制 ...

  9. POJ2506:Tiling(递推+大数斐波那契)

    http://poj.org/problem?id=2506 #include <iostream> #include <stdio.h> #include <strin ...

  10. Hyperledger Fabric 开发环境搭建 centos7系统

    一.安装GO语言 下载最新版的go 打开Terminal,输入命令(以下命令都是以root管理员的角色进行的) su 输入密码:***** wget https://storage.googleapi ...