BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)
\(Description\)
给定N,G,求$$G{\sum_{k|N}C_nk}\mod\ 999911659$$
\(Solution\)
由费马小定理,可以先对次数化简,即求\(\sum_{k|N}C_n^k\mod\ 99991168\),然后快速幂就可以解决。
可以把999911659分解成4个质因数,分别用Lucas定理求解然后用CRT合并即可。
要注意费马小定理成立的条件: a,p互质,即G!=mod.
//1380kb 156ms
#include <cmath>
#include <cstdio>
#include <algorithm>
#define P (999911658)
#define mod (999911659)
typedef long long LL;
const int Pi[5]={2,3,4679,35617};
int cnt,divi[100005],r[5],fac[40000];
int FP(LL x,int k,LL p)
{
LL t=1;
for(; k; k>>=1,x=x*x%p)
if(k&1) t=t*x%p;
return (int)t;
}
inline int inv(int v,int p){
return FP(v,p-2,p);
}
inline int C(int n,int m,int p){
if(n<m) return 0;
return fac[n]*inv(fac[m]*fac[n-m]%p,p)%p;
}
int Lucas(int n,int m,int p)
{
int res=1;
for(; m&&res; n/=p,m/=p)
(res*=C(n%p,m%p,p))%=p;
return res;
}
void Ex_gcd(int a,int b,int &x,int &y){
if(!b) x=1,y=0;
else Ex_gcd(b,a%b,y,x),y-=a/b*x;
}
int CRT()
{
int Mi,x,y,res=0;
for(int i=0; i<4; ++i)
{
Mi=P/Pi[i], Ex_gcd(Mi,Pi[i],x,y);
x=(x%Pi[i]+Pi[i])%Pi[i], (res+=1ll*r[i]*Mi%P*x%P)%=P;
}
return res;
}
int main()
{
int g,n;
scanf("%d%d",&n,&g);
if(g==mod) {putchar('0'); return 0;}
for(int i=1,lim=sqrt(n); i<=lim; ++i)
if(!(n%i))
{
divi[++cnt]=i;
if(i*i!=n) divi[++cnt]=n/i;
}
fac[0]=1;
for(int k=0; k<4; ++k)
{
for(int i=1; i<=Pi[k]; ++i) fac[i]=fac[i-1]*i%Pi[k];
for(int i=1; i<=cnt; ++i)
(r[k]+=Lucas(n,divi[i],Pi[k]))%=Pi[k];
}
printf("%d",FP(g,CRT(),mod));
return 0;
}
BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)的更多相关文章
- 【bzoj1951】[Sdoi2010]古代猪文 费马小定理+Lucas定理+中国剩余定理
题目描述 求 $g^{\sum\limits_{k|n}C_{n}^{\frac nk}}\mod 999911659$ 输入 有且仅有一行:两个数N.G,用一个空格分开. 输出 有且仅有一行:一个 ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- 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 ...
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2194 Solved: 919[Submit][Status] ...
- bzoj 1951 [Sdoi2010]古代猪文 ——数学综合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 数学综合题. 费马小定理得指数可以%999911658,又发现这个数可以质因数分解.所 ...
- bzoj 1951 [Sdoi2010]古代猪文(数论知识)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1951 [思路] 一道优(e)秀(xin)的数论题. 首先我们要求的是(G^sigma{ ...
- 【刷题】BZOJ 1951 [Sdoi2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- bzoj 1951: [Sdoi2010]古代猪文
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...
- bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】
首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...
随机推荐
- Java基础-标识符与关键字
Java基础-标识符与关键字 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是标识符 标识符就是程序员在编写程序时,给类,变量,方法等起的名字. 二.标识符的命名规则 1& ...
- JVM总结(一):概述--JVM对象探秘
这一节我们来讨论一下JVM对象建立过程. JVM对象探秘 对象的建立 对象的内存布局 对象的访问定位 JVM对象探秘 对象的建立 对象的建立过程 图一:对象建立过程 1.类加载检查. 当JVM检测 ...
- [六字真言]2.嘛.异常定制和通用.md
幻世当空 恩怨休怀 舍悟离迷 六尘不改 且怒且悲且狂哉! 最近一直在循环的一首歌! 丰富自己,比取悦他人更有力量.种下梧桐树,引得凤凰来.你若盛开,蝴蝶自来! 言归正传! 言归正传! 不要去大包大揽 ...
- Centos 7和 Centos 6开放查看端口 防火墙关闭打开
Centos 7 firewall 命令: 查看已经开放的端口: firewall-cmd --list-ports 开启端口 firewall-cmd --zone=public --add-por ...
- c#:无法将 NULL 转换成“System.DateTime”,因为它是一种值类型
摘自:http://www.blogjava.net/parable-myth/archive/2010/09/30/333454.html 在C# 2.0里面的数据类型中,分为值类型和引用类型,引用 ...
- git的权威指南
CHENYILONG 博客 git的权威指南 全屏 © chenyilong.本站由Postach.io 博客
- 经典设计模式-iOS的实现
最近看了<HeadFirst 设计模式>这本书,给组内伙伴准备一次分享,把这次分享记录下来,有需要的可以看看. 这本书主要介绍了四人帮23种经典设计模式中的的14种,也是常用的几种.看完这 ...
- Ubuntu 12.04安装后无法boot
解决方法是: 在选择启动项时, U盘会有两种启动方式: UEFI和非UEFI的. 用非UEFI进入live CD安装系统后无法启动, 用UEFI重装后问题解决.
- mybatis介绍——(一)
官方API:http://www.mybatis.org/mybatis-3/index.html 中文: http://www.mybatis.org/mybatis-3/zh/index.html ...
- 【CTF REVERSE】WHCTF2017-CRACKME
1.前言 假装大学生水一下CTF题目,常规思路.程序没有加壳,是VC写的MFC程序. 2.破题思路 1.MessageBox 下断点 2.找到提示错误字符串的函数B 3.跟踪函数 4.跟踪算法 3.实 ...