古代猪文:数论大集合:欧拉定理,exgcd,china,逆元,Lucas定理应用
- /*
- 古代猪文:Lucas定理+中国剩余定理
- 999911658=2*3*4679*35617
- Lucas定理:(m,n)=(sp,tp)(r,q) %p
- 中国剩余定理:x=sum{si*Mi*ti}+km
- 先求出sum{C(d,n)}%p[i]=a[i]
- */
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define mod 999911659
- #define maxn 100005
- ll m[]={,,,};
- ll f[][maxn],a[],d[maxn];
- ll exgcd(ll a,ll b,ll &x,ll &y){
- if(b==){x=,y=;return a;}
- ll d=exgcd(b,a%b,x,y);
- ll z=x;x=y,y=z-a/b*y;
- return d;
- }
- ll inv(ll a,ll Mod){
- ll x,y;
- exgcd(a,Mod,x,y);
- return (x+Mod)%Mod;
- }
- ll C(int i,ll n,ll k,ll p){return f[i][n]*inv(f[i][k]*f[i][n-k]%p,p)%p;}
- ll lucas(int i,ll n,ll k,ll p){
- int res=;
- while(n&&k){
- res=res*C(i,n%p,k%p,p)%p;
- if(res==)return ;
- n/=p,k/=p;
- }
- return res;
- }
- ll Pow(ll x,ll n,ll Mod){
- ll res=;
- while(n){
- if(n%)res=res*x%Mod;
- n>>=;x=x*x%Mod;
- }
- return res;
- }
- ll china(int n,ll a[],ll m[]){
- ll M=,res=;
- for(int i=;i<n;i++)M*=m[i];
- for(int i=;i<n;i++){
- ll w=M/m[i],x,y;
- exgcd(w,m[i],x,y);
- res=(res+x*w*a[i])%M;
- }
- return (res+M)%M;
- }
- int main(){
- ll n,g;
- cin>>n>>g;
- if(g==mod){puts("");return ;}
- int tot=;
- for(int i=;i*i<=n;i++)
- if(n%i==){//求n的所有质因子
- if(i*i==n)d[tot++]=i;
- else d[tot++]=i,d[tot++]=n/i;
- }
- for(int i=;i<;i++){
- f[i][]=;
- for(int j=;j<m[i];j++)
- f[i][j]=f[i][j-]*j%m[i];
- }
- for(int i=;i<tot;i++)
- for(int j=;j<;j++)
- a[j]=(a[j]+lucas(j,n,d[i],m[j]))%m[j];;
- ll ans=china(,a,m);
- cout<<Pow(g,ans,mod);
- }
古代猪文:数论大集合:欧拉定理,exgcd,china,逆元,Lucas定理应用的更多相关文章
- 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]古代猪文 数论-中国剩余定理-Lucas定理
[bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...
- luogu 2480 古代猪文 数论合集(CRT+Lucas+qpow+逆元)
一句话题意:G 的 sigma d|n C(n d) 次幂 mod 999911659 (我好辣鸡呀还是不会mathjax) 分析: 1.利用欧拉定理简化模运算 ,将上方幂设为x,则x=原式mod ...
- 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,用费马小定理处理指数,卢 ...
- P2480 [SDOI2010]古代猪文
P2480 [SDOI2010]古代猪文 比较综合的一题 前置:Lucas 定理,crt 求的是: \[g^x\bmod 999911659,\text{其中}x=\sum_{d\mid n}\tbi ...
- BZOJ1951 古代猪文 【数论全家桶】
BZOJ1951 古代猪文 题目链接: 题意: 计算\(g^{\sum_{k|n}(^n_k)}\%999911659\) \(n\le 10^9, g\le 10^9\) 题解: 首先,根据扩展欧拉 ...
- BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ...
- 1951: [Sdoi2010]古代猪文
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2171 Solved: 904[Submit][Status] ...
随机推荐
- Python 9 进程,线程
本节内容 python GIL全局解释器锁 线程 进程 Python GIL(Global Interpreter Lock) In CPython, the global interpreter l ...
- whatis命令,一个非常有用的命令
比如我不知道yum的配置文件yum.conf怎么用,就可以whatis yum.conf,
- python,小练习(计算两点之间直线长度)
#首先引入数学函数 import math #创建一个点的类 class Point(): #初始化点的坐标(x,y) def __init__(self,x=0,y=0): self.x = x s ...
- 使用服务器参数文件(SPFILE)管理初始化参数
传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...
- dubbo源码分析4——SPI机制_ExtensionFactory类的作用
ExtensionFactory的源码: @SPI public interface ExtensionFactory { /** * Get extension. * * @param type o ...
- MySQL之路 ——1、安装跳坑
最近几天准备写一个JavaWeb的简单登录,注册试下手:所谓”工欲善其事必先利其器“,然后数据库方面的话,考虑用MySQL.在安装MySQL过程中,碰到了一些问题(大同小异),记录在此,诸君共勉. 1 ...
- c++不定参数函数
不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多.除了格式化输出之外,我实在没看到多少应用.主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替 ...
- 四重解法---P1047 校门外的树
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,--,L,都种 ...
- CSRFGuard工具介绍
理解CSRFGuard的基础:http://www.runoob.com/jsp/jsp-tutorial.html 1:您需要做的第一件事是将OWASP.CSRFARGAD.JAR库复制到类路径中. ...
- mysql 定时备份bat脚本 ,方便小型服务简单快速备份mysql
mysql定时备份bat脚本 echo 数据库为用户名为root 密码为root 数据库名为kdykt echo mysqldump 命令如果没有配置环境变量要在bin目录下执行 set " ...