题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951

数学综合题。

费马小定理得指数可以%999911658,又发现这个数可以质因数分解。所以分解做完再用中国剩余定理合并。

为什么不能预处理阶乘的逆元?

为什么正常的中国剩余定理会T?非得两两合并?

  而且两两合并里的 a0+=m0*x 不太明白。

  PS:现在明白了。新的a是a=a1+m1*x1=a2+m2*x2,a的通解是a1加上任意倍的m1*x1。

需要特判!那些C( )、lucas( )里的判断也要注意。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll m[]={,,,,};//ll
ll n,g,ans,x,y,a[],jc[][],jcn[][],M[];
ll pw(ll x,ll k,ll mod)
{
ll ret=;while(k){if(k&)(ret*=x)%=mod;(x*=x)%=mod;k>>=;}return ret;
}
void init()
{
for(int u=;u<=;u++)M[u]=m[]/m[u];
for(int u=;u<=;u++)
{
jc[u][]=;
for(int i=;i<m[u];i++)jc[u][i]=jc[u][i-]*i%m[u];
// jcn[u][m[u]-1]=pw(jc[u][m[u]-1],m[u]-2,u); //为什么不能预处理阶乘的逆元?
// for(int i=m[u]-2;i;i--)jcn[u][i]=(jcn[u][i+1]*(i+1))%m[u];
}
}
ll C(ll i,ll j,int type)
{
if(i<j)return ; //
return jc[type][i]*pw(jc[type][j]*jc[type][i-j],m[type]-,m[type])%m[type]; //
// if(!j)return 1;
// return jc[type][i]*jcn[type][j]%m[type]*jcn[type][i-j]%m[type];
}
ll lucas(ll i,ll j,int type)
{
if(!j||!i)return ; //
if(i<m[type]&&j<m[type])return C(i,j,type);
return lucas(i/m[type],j/m[type],type)*C(i%m[type],j%m[type],type)%m[type];
}
void exgcd(ll a,ll b)
{
if(!b){x=;y=;return;}
exgcd(b,a%b);
ll tp=x;x=y;
y=tp-a/b*y;
}
int main()
{
init();
scanf("%lld%lld",&n,&g);
if(g==m[]+){printf("");return ;} //必须判这个!
for(int i=;i*i<=n;i++) if(n%i==) //
for(int j=;j<=;j++)
{
(a[j]+=lucas(n,i,j))%=m[j];
if(i*i!=n)(a[j]+=lucas(n,n/i,j))%=m[j];
}
// ll mod=m[0]; //用中国剩余定理合并:会TLE
// for(int i=1;i<=4;i++)
// {
// exgcd(M[i],m[i]);
// (ans+=M[i]*x%mod*a[i]%mod)%=mod;
// }
// printf("%lld\n",pw(g,ans,mod+1));
ll m0=m[],a0=a[]; //两个两个地合并
for(int i=;i<=;i++)
{
exgcd(m0,m[i]);
x=(x*(a[i]-a0)%m[i]+m[i])%m[i]; //%m[i]
a0+=m0*x; //
m0*=m[i];
}
printf("%lld\n",pw(g,a0,m[]+));
return ;
}

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]古代猪文

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

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

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

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

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

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

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

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

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

随机推荐

  1. HA 脑裂原理

    HA 脑裂原理 “裂脑”,乃一个形象的术语,系HA系统危机情景. 引子:“裂脑”是治疗“癫痫”病的一种手术.医生们认为癫痫病发作是由于大脑“异常放电”所至.为了阻止“异常放电”波及整个大脑(左.右半脑 ...

  2. 主攻ASP.NET MVC4.0之重生:发邮箱激活验证

    导入Interop.jmail组件 using jmail;using System.Net.Mail; 点击下载源代码 Controller相关代码 public class SendEmailCo ...

  3. Android源码目录分析【转】

    本文转载自:http://blog.csdn.net/backgarden_straw/article/details/8050783 在学习Android的过程中,学习写应用还好,一开始不用管太多代 ...

  4. ubuntu关闭631(cups)端口

    在ubuntu17.04环境下使用nmap扫描自己机器,发现631端口处于开启状态,将其输入到浏览器,可以看出是网络打印机的服务: 这个端口开着总是那么的刺眼,(5.12全球爆发的勒索病毒让人不寒而栗 ...

  5. WINDOWS下好用的MongoDB 3.0以上客户端工具: NoSql Manager

      WINDOWS下好用的MongoDB 3.0以上客户端工具: NoSql Manager https://www.mongodbmanager.com/download  

  6. MyEclipse Could not create the view: An unexpected exception was thrown解决方案

    问题:电脑突然断电,myeclipse非正常关闭,“Package Explorer”非正常显示,出现错误“Could not create the view: An unexpected excep ...

  7. 【P2405】方格取数问题加强版(费用流)

    考虑如何建图.还是老样子先拆点,然后把每两个点之间连接两条边,一条流量为1,费用为-点权,处理是否走这个点.一条流量无限,没有费用,因为哪怕一个点选过了,它的地方还是可以重复走过去的. 然后把经由一个 ...

  8. sql server 2005 Express 下载

    简体中文版: SQL Server 2005 Express Edition 简体中文版 链接页面: http://www.microsoft.com/downloads/details.aspx?d ...

  9. 派派和京东的paipai域名之争

    最近有一款叫“派派”的APP很火,微博上.电梯里.群里到处都是推广广告.不仅如此,还有大张伟.关晓彤.王祖蓝等十几个明星发帖为“派派”站台.有消息称,派派这段时间仅线上推广就花去了约1600万. 总融 ...

  10. Java之File文件类

    package IoDemo; import java.io.File; import java.io.FileFilter; import java.io.IOException; import j ...