BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)
Description
Input
Output
Sample Input
Sample Output
HINT
10%的数据中,1 <= N <= 50;
20%的数据中,1 <= N <= 1000;
40%的数据中,1 <= N <= 100000;
100%的数据中,1 <= G <= 1000000000,1 <= N <= 1000000000。
数论好题。因为用的东西太TM多了
首先可以明确题目让我们求解的式子为$G^{\sum_{d|n} C_n^d}~mod~p$
因为p是质数,所以根据费马小定理可得
$\begin{aligned} \displaystyle ans &= G^{\sum_{d|n} C_n^d}~mod~p \\ &=G^{\sum_{d|n} C_n^d~mod~(p-1)}~mod~p \end{aligned}$
所以我们现在不需要管G了,只需要把指数求出来就好了。
然而$p-1$并不是一个质数,该怎么用Lucas求解呢?
我们可以将$p-1$质因数分解,成$2,3,4679,35617$,然后对这四个质因数分别Lucas,然后把这四个列成一个同余方程组CRT解出来即可。
exLucas应该也是可以的不过我还没学会
注意特判G=p的情况
#include<iostream>
#include<cstring>
#include<cstdio>
#define N (100000)
#define MOD (999911659)
using namespace std; long long m[]={,,,,};
long long n,g,a[N];
long long fac[N],inv[N],facInv[N]; long long C(long long n,long long m,long long p)
{
if (m>n) return ;
return fac[n]*facInv[m]%p*facInv[n-m]%p;
} long long Lucas(long long n,long long m,long long p)
{
if (n<m) return ;
long long sum=;
for (; m; n/=p,m/=p)
sum=sum*C(n%p,m%p,p)%p;
return sum;
} void Init(long long p)
{
inv[]=; fac[]=facInv[]=;
for (int i=; i<=p; ++i)
{
if (i!=) inv[i]=(p-p/i)*inv[p%i]%p;
fac[i]=fac[i-]*i%p;
facInv[i]=facInv[i-]*inv[i]%p;
}
} void exgcd(long long a,long long b,long long &d,long long &x,long long &y)
{
if (!b){d=a; x=; y=; return;}
exgcd(b,a%b,d,y,x); y-=x*(a/b);
} long long CRT()
{
long long M=m[],A=a[],d,x,y,t;
for (int i=; i<=; ++i)
{
exgcd(M,m[i],d,x,y);
if ((a[i]-A)%d) return -;
x*=(a[i]-A)/d; t=m[i]/d; x=(x%t+t)%t;
A=M*x+A; M=M/d*m[i]; A%=M;
}
A=(A%M+M)%M;
return A;
} long long Qpow(long long a,long long b,long long p)
{
long long ans=,base=a;
while (b!=)
{
if (b&!=)
ans=(ans*base)%p;
base=(base*base)%p;
b>>=;
}
return ans;
} int main()
{
scanf("%lld%lld",&n,&g);
if (g==MOD)
{
printf("");
return ;
}
for (int i=; i<=; ++i)
{
Init(m[i]);
for (int j=; j*j<=n; ++j)
{
if (n%j) continue;
(a[i]+=Lucas(n,j,m[i]))%=m[i];
if (j*j==n) continue;
(a[i]+=Lucas(n,n/j,m[i]))%=m[i];
}
}
printf("%lld",Qpow(g,CRT(),MOD));
}
BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)的更多相关文章
- P2480 [SDOI2010]古代猪文 Lucas+CRT合并
\(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长,博大精深. iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N.当然,一种语言如果字数很多,字典也相应会 ...
- 【BZOJ1951】古代猪文(CRT,卢卡斯定理)
[BZOJ1951]古代猪文(CRT,卢卡斯定理) 题面 BZOJ 洛谷 题解 要求什么很显然吧... \[Ans=G^{\sum_{k|N}{C_N^k}}\] 给定的模数是一个质数,要求解的东西相 ...
- 【BZOJ1951】[Sdoi2010]古代猪文 Lucas定理+CRT
[BZOJ1951][Sdoi2010]古代猪文 Description 求$X=\sum\limits_{d|n}C_n^d$,$Ans=G^X (\mod 999911659)$. Input 有 ...
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2194 Solved: 919[Submit][Status] ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】
题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...
- BZOJ1951[SDOI2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- bzoj千题计划323:bzoj1951: [Sdoi2010]古代猪文(Lucas+CRT+欧拉定理)
https://www.lydsy.com/JudgeOnline/problem.php?id=1951 先欧拉降幂 然后模数质因数分解 分别计算组合数的结果,中国剩余定理合并 #include&l ...
- BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论
原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...
随机推荐
- log4net sqlite
<?xml version="1.0" encoding="utf-8" ?><log4net> <appender name=& ...
- Google Authenticator(谷歌身份验证器)
<!DOCTYPE html>Google Authenticator(谷歌身份验证器) ] Google Authenticator(谷歌身份验证器) Google Authentica ...
- java多线程-synchronized
一.线程安全问题 多线程操作各自线程创建的资源的时候,不存在线程安全问题.但多线程操作同一个资源的时候就会出现线程安全问题.下例为两个线程操作同一个name资源时发生的问题. class TestSy ...
- $bzoj1052-HAOI2007$ 覆盖问题 抽屉原理 二分答案
题面描述 某人在山上种了\(N\leq 2*10^4\)棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用\(3\) ...
- js 替换中间四位手机号为 *
replace(/(\d{})\d{}(\d{})/, '$1****$2')
- Rancher2.0 外置存储卷
一,环境准备 01,基础环境 一台rancher集群 服务器搭建参考原先文章 >>飞机直达 一台nfs服务器 02,nfs服务器搭建 rpm -qa rpcbind|grep rpcbin ...
- 每日一问:Python生成器和迭代器,with上下文管理工具
1.生成器: 1.1 起源: 如果列表中有一万个元素,我们只想要访问前面几个元素,对其进行相关操作,通过for循环方式效率太低,并且后面的元素会浪费内存,还会受到内存限制,所以产生生成器来解决这个问题 ...
- 推荐文章unity框架与工具
https://www.indienova.com/u/kuaile/blogread/1343
- MySQL关联left join 条件on与where不同
以下的文章主要讲述的是MySQL关联left join 条件on与where 条件的不同之处,我们现在有两个表,即商品表(products)与sales_detail(销售记录表).我们主要是通过这两 ...
- Flask 编写http接口api及接口自动化测试
片言 此文中代码都是笔者工作中源码,所以不会很完整,主要摘常见场景的api片段用以举例说明 另:此文主要针对自动化测试人员,尤其有python基础阅读更佳. 笔者使用 python3.6 + post ...