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 ...
随机推荐
- Python 时间格式转换
Python time, datetime模块常用方法 1.使用time模块,获取当前时间戳~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~import timetime.time( ...
- 4.整体架构和Smart Scan
寻道时间: 外圈,比内圈要多, 即外圈是比较快的. 第一次创建grid disk 时,是创建外圈,用于存放数据的,内圈存储归档这些数据 CellCLI> CREATE GRIDDISK ALL ...
- linux 入门命令总结
1,tree -d /etc/ 参数表示只显示目录 -f 显示内容的完整 -i 不显示树枝显示完整路径2,mkdir -p 递归创建多级目录 -v 显示创建目录的过程 -m 设置目录的默认权限 mkd ...
- ansible 入门学习(一)
一,ansible 目录结构 (来自于ansible权威指南) 二,ansible.cfg 配置项说明 /etc/ansible/ansible.cfg --> ———————————————— ...
- (转) shell实例手册
shell实例手册 1文件{ touch file # 创建空白文件rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制)dos2uni ...
- ckeditor和ckfinder
ckeditor是一个所见即所得的富文本编辑器,用来代替drupal自带的编辑器. 但是从drupal.com下载的ckeditor模块本身没有实现功能,它指向了由cdn.ckeditor.com所提 ...
- 案例47-crm练习登录校验拦截器
1 LoginInterceptor package www.test.web.interceptor; import java.util.Map; import com.opensymphony.x ...
- 利用pandas生成csv文件
# -*- coding:UTF-8 -*- import json from collections import OrderedDict with open('dns_status.json',' ...
- 【VMware】VMware的安装和更改虚拟机默认存储路径
1.VMware Workstation 14中文破解版安装 网盘下载链接:https://pan.baidu.com/s/1pbDXpgpNQTdTRzzKNWfE1A linux镜像(CentOS ...
- webbrowser使用已过期资源的一个报错
如果webbrowser控件已更新,仍使用一个HtmlElement就会出现以下错误: 2013-12-23 17:33:48,375 [18] ERROR xx.xxx<Run>b__0 ...