BZOJ 1951 [SDOI2010]古代猪文 (组合数学+欧拉降幂+中国剩余定理)
题目大意:求$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]古代猪文 (组合数学+欧拉降幂+中国剩余定理)的更多相关文章
- 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] ...
- [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
[SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...
- 【刷题】BZOJ 1951 [Sdoi2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- bzoj 1951 [Sdoi2010]古代猪文(数论知识)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1951 [思路] 一道优(e)秀(xin)的数论题. 首先我们要求的是(G^sigma{ ...
- bzoj 1951 [Sdoi2010]古代猪文 ——数学综合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 数学综合题. 费马小定理得指数可以%999911658,又发现这个数可以质因数分解.所 ...
- bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】
首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...
- bzoj 1951: [Sdoi2010]古代猪文
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...
- BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)
题目链接 \(Description\) 给定N,G,求\[G^{\sum_{k|N}C_n^k}\mod\ 999911659\] \(Solution\) 由费马小定理,可以先对次数化简,即求\( ...
随机推荐
- C# 正则表达式大全(转载)
文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...
- Kattis - String Matching(kmp)
String Matching Input The input consists of several test cases. Each test case consists of two lines ...
- 字符串时间转Date格式
/** * 字符串时间格式转 Date 格式 * @param strDate * @return */ public static Date getDateTimeByStringTime(Stri ...
- 多个账号GitHub账号配置
1.vi config 重复以上步骤就行 然后#注释下 是个人账号还是公司用的账号 mv id_rsa id_rsa_qq 做下区别,防止冲突 ,别忘了,路径也要改下 mv id_rsa ...
- composer install或者update 出错
composer install或者update 出错Your requirements could not be resolved to an installable set of package ...
- Github添加SSHkey
Git详细教程可参考廖雪峰的Git教程 1. 打开 Git Bash,输入cd ~/.ssh——回车(看你是否有了ssh key 密钥,有了就备份): 2. 输入ssh-keygen -t rsa - ...
- web 安全主题
- CF739E Gosha is hunting(费用流,期望)
根据期望的线性性答案就是捕捉每一只精灵的概率之和. 捕捉一只精灵的方案如下: 1.使用一个\(A\)精灵球,贡献为\(A[i]\) 2.使用一个\(B\)精灵球,贡献为\(B[i]\) 3.使用一个\ ...
- 小白都能看懂的Linux系统下安装配置Zabbix
实验环境: 操作系统:Centos 7.6 服务器ip:192.168.10.100 运行用户:root 网络环境:Internet Zabbix是一个基于web界面的提供分布式系统监控及网络功能的企 ...
- NOIP2018提高组金牌训练营——数论专题
地址 https://www.51nod.com/live/liveDescription.html#!liveId=23 1187 寻找分数 给出 a,b,c,d, 找一个分数p/q,使得a/b & ...