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 ... 
随机推荐
- PIE SDK灾前灾后对比
			灾前灾后对比功能是GIS软件中常用的功能之一,指利用多时相获取的覆盖同一地表区域的遥感影像及其它辅助数据来确定和分析地表变化.它利用计算机图像处理系统,对不同时段目标或现象状态的变化进行识别.分析:它 ... 
- linux + eclipse C语言 开发环境搭建
			经常与linux系统打交道,了解学习一下C语言,下载eclipse c/c++ linux版,直接在虚拟机linux系统上安装http://www.eclipse.org/downloads/pack ... 
- VUE--mixins的一些理解。
			概念:混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 用法: 1.创建混 ... 
- (转)CentOS/Linux 解决 SSH 连接慢
			CentOS/Linux 解决 SSH 连接慢 原文:http://blog.csdn.net/doiido/article/details/43793391 现在连接linux服务器一般都是使用SS ... 
- 前端性能优化之优化图片 && 优化显示图片
			前端图片优化一直以来都是热门话题,从需求上来看,很多站点往往是图片体积大于代码体积, 图片请求多余代码文件请求, 给前端的性能带来了很大的困扰,那么应该如何解决呢? 零. 认识图片 我们通常使用的图片 ... 
- TOJ 4119 Split Equally
			描述 Two companies cooperatively develop a project, but they don’t like working with one another. In o ... 
- BNU 4356 ——A Simple But Difficult Problem——————【快速幂、模运算】
			A Simple But Difficult Problem Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO format: %l ... 
- CSS气泡
			气泡状文本框,是一种很生动的网页设计手段. 它可以用来表示用户的发言. 也可以用来作为特定信息的提示符. DVD租借网站Netflix,还用它显示碟片的详细信息. ================== ... 
- PHP常用数组操作方法汇总
			array_change_key_case -- 返回字符串键名全为小写或大写的数组array_chunk -- 将一个数组分割成多个array_combine -- 创建一个数组,用一个数组的值作为 ... 
- C# Attribute应用:类签名
			在应用别人接口的时候,总是要用签名,很是不理解签名这是怎么知道做的.通过对Attribute的学习了解.大体可以用Attribute来做签名应用. 具体过程如下: 首先我们要先定义一个类,该类继承At ... 
