题目大意:求$G^{\sum_{m|n} C_{n}^{m}}\;mod\;999911659\;$的值$(n,g<=10^{9})$

并没有想到欧拉定理..

999911659是一个质数,所以$\varphi(p)=p-1$

利用欧拉定理,降幂化简式子$G^{\sum_{m|n} C_{n}^{m}\;mod\;\varphi(p)}$

这样,指数部分可以用$Lucas$+中国剩余定理求解

然而..$G>10^9$很大,可能和模数$999911659$不互质!所以质数要额外加上$\varphi(p)$

 #include <map>
#include <queue>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10100
#define ull unsigned long long
#define ll long long
#define maxn 36000
using namespace std; ll n,g;
const ll m[]={,,,}; ll qpow(ll x,ll y,const ll &mod){
ll ans=;
while(y){
if(y&) ans=(ans*x)%mod;
x=(x*x)%mod,y>>=;
}return ans;
}
namespace excrt{
ll exgcd(ll a,ll b,ll &x,ll &y){
if(!b) {x=,y=;return a;}
ll ans=exgcd(b,a%b,x,y);
ll t=x;x=y,y=t-a/b*y;
return ans;
}
ll qadd(ll x,ll y,const ll &mod){
ll ans=;
while(y){
if(y&) ans=(ans+x)%mod;
x=(x+x)%mod,y>>=;
}return ans;
}
ll ans=,M=;
void insert(ll A,ll B)
{
ll a=A,b=B,c=(a-ans%b+b)%b,x,y,g;
g=exgcd(M,b,x,y);b/=g;
//if(c/g!=0) return;
//x=qadd(x,c/g,b);
x=x*(c/g)%b;
ans+=x*M,M*=b,ans=(ans%M+M)%M;
}
};
int son[N],d[N],ps[N],num,cnt;
namespace calc{
ll mul[maxn+],inv[maxn+],minv[maxn+];
void Pre(const ll &mo)
{
mul[]=mul[]=inv[]=inv[]=minv[]=minv[]=;
for(int i=;i<mo;i++){
mul[i]=mul[i-]*i%mo;
inv[i]=1ll*(mo-mo/i)*inv[mo%i]%mo;
minv[i]=minv[i-]*inv[i]%mo;
}
}
ll C(ll a,ll b,const ll &mo)
{return mul[a]*minv[b]%mo*minv[a-b]%mo;}
ll Lucas(ll a,ll b,const ll &mo)
{
if(b>a) return ;
if(a<mo&&b<mo) return C(a,b,mo);
return Lucas(a/mo,b/mo,mo)*Lucas(a%mo,b%mo,mo)%mo;
}
ll solve(const ll &mo)
{
for(int i=;i<mo;i++)
mul[i]=inv[i]=minv[i]=;
Pre(mo);ll ans=;
for(int i=;i<=cnt;i++)
(ans+=Lucas(n,son[i],mo))%=mo;
return ans;
}
};
void dfs_son(int i,ll s)
{
if(i>num) {son[++cnt]=s;return;}
for(int j=;j<=d[i];j++)
dfs_son(i+,s),s*=ps[i];
}
void get_son(ll a)
{
int sq=sqrt(a);
for(int i=;i<=sq;i++)
if(a%i==){
ps[++num]=i;
while(a%i==)
d[num]++,a/=i;
}
if(a!=)
ps[++num]=a,d[num]++;
dfs_son(,);
}
const ll smod=; int main()
{
scanf("%lld%lld",&n,&g);
get_son(n);
for(int i=;i<;i++)
{
ll ans=calc::solve(m[i]);
excrt::insert(ans,m[i]);
}
ll pw=excrt::ans;
ll ans=qpow(g,pw+smod-,smod);
printf("%lld\n",ans);
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. [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)

    [SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. JS自定义功能函数实现动态添加网址参数修改网址参数值

    无论是前端开发还是后台设计,很多时候开发人员都需要获取当前或目标网址的相关信息.这个已有现成的内置对象属性可以直接调用了(下面是获取当前页面的参考代码) 复制代码 代码如下: <script t ...

  2. easyui easyui-accordion的使用和在tab切换时没有样式

    1.easyui-accordion的使用 <div id="aa" class="easyui-accordion" style="width ...

  3. Extjs获取input值的几种方法

    记录一下: ExtJs获取文本框中值的几种方式 EXTHTML 1.Html文本框 如: 获取值的方式为: var tValue = Ext.getDom('test').value; 或者 var ...

  4. These relative modules were not found:...{"sourceM ap":false} 报错解决

    今天在使用vue2.0 + webpack 时,没有动过任何配置文件,也没更新依赖,但是报下面的错误: These relative modules were not found: * ./star1 ...

  5. Linux 进程及作业管理

    进程简介:  内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能  进程(Process):什么是进程,进程是程序的执行实例,即运行中的程序,同时也是程序的一个副本:程序是放置于磁 ...

  6. 关于samsung连接BLE设备的一些资料汇总和开发过程一些经验总结

    1 忙了这么久,终于有时间把最近几个月弄的东西整理一下,顺便我的开发过程和经历. 被公司分到做一个蓝牙4.0的项目,对这种软硬结合的东西也比较感兴趣,所以很快投入到android蓝牙4.0的项目中来. ...

  7. snprintf

    snprintf(),函数原型为int snprintf(char *str, size_t size, const char *format, ...).   将可变参数 “…” 按照format的 ...

  8. Jquery学习总结(2)——jQuery Ajax用法详解

    [详解]jquery ajax在web应用开发中常用,主要包括有ajax,get,post,load,getscript等这几种常用无刷新操作方法,下面来给大家介绍一下.我们首先先从最简单的方法看起. ...

  9. 监控Apache计数器

  10. 《深入理解Android 卷III》第五章 深入理解Android输入系统

    <深入理解Android 卷III>即将公布.作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白.即Android Framework中和UI相关的部分. ...