我们首先来概括一下题意,其实就是给定 \(n,g\),求:

\[g^{\sum_{k\nmid n} C_n^{\frac{n}{k}}}\operatorname{mod} 999911659
\]

如果 \(k\nmid n\),那么我们知道 \(\frac{n}{k}\cdot k=n\),所以原式转化为:

\[g^{\sum_{k\nmid n} C_n^k}\operatorname{mod} 999911659
\]

根据欧拉定理原式转化为:

\[g^{(\sum_{k\nmid n} C_n^k)\operatorname{mod} \varphi(999911659)}\operatorname{mod} 999911659
\]

由于 \(999911659\) 是一个质数,所以 \(\varphi(999911659)=999911658\)。原式可变为:

\[g^{(\sum_{k\nmid n} C_n^k)\operatorname{mod} 999911658}\operatorname{mod} 999911659
\]

很明显思路就是用 \(O(\sqrt{n})\) 的时间去找出 \(k\),然后快速求解组合数,很明显,Lucas 定理失效了,我们就需要进行一些问题的转化。我们可以对 \(999911658\) 进行质因数分解:\(999911658=2\times 3\times4679\times 35617\)。我们可以分别设:

\[\begin{cases}a_1={(\sum_{k\nmid n} C_n^k)\operatorname{mod} 2}\\a_2={(\sum_{k\nmid n} C_n^k)\operatorname{mod} 3}\\a_3={(\sum_{k\nmid n} C_n^k)\operatorname{mod} 4679}\\a_4={(\sum_{k\nmid n} C_n^k)\operatorname{mod} 35617}\end{cases}
\]

用中国剩余定理(CRT)解决即可。

注意特判 \(g=mod\)

//#pragma GCC optimize("Ofast","-funroll-loops","-fdelete-null-pointer-checks")
//#pragma GCC target("ssse3","sse3","sse2","sse","avx2","avx")
#include<bits/stdc++.h>
#define int long long
using namespace std; int read() {
char ch=getchar();
int f=1,x=0;
while(ch<'0'||ch>'9') {
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-'0';
ch=getchar();
}
return f*x;
} const int mod=999911659,b[]={0,2,3,4679,35617}; int n,jc[50010],a[10],g,m[5]; int qpow(int x,int y) {
int ret=1;
while(y) {
if(y&1) {
ret*=x;
ret%=mod;
}
x=x*x%mod;
y>>=1;
}
return ret;
} void exgcd(int a,int b,int &x,int &y) {
if(b==0) {
x=1;
y=0;
return ;
}
exgcd(b,a%b,x,y); int x2=y;int y2=x-a/b*y;
x=x2;y=y2;
}
int gcd(int a,int b) {
return b==0? a:gcd(b,a%b);
} int inv(int q,int p) {
int x,y;
int g=gcd(q,p);
q/=g;p/=g;
exgcd(q,p,x,y);
return (x+p)%p;
} int calc(int n,int m,int p) {
if(m>n) {
return 0;
}
return jc[n]*inv(jc[m],p)%p*inv(jc[n-m],p)%p;
} int c(int n,int m,int p) {
if(m==0) {
return 1;
}
return c(n/p,m/p,p)*calc(n%p,m%p,p)%p;
} signed main() {
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n=read();g=read(); if(g==mod) {
cout<<0<<endl;
return 0;
} int nn=sqrt(n);
for(int j=1;j<=4;j++) {
jc[0]=1;
for(int i=1;i<=b[4]+1;i++) {
jc[i]=jc[i-1]*i%b[j];
}
for(int i=1;i<=nn;i++) {
if(n%i==0) {
a[j]+=c(n,i,b[j]);
a[j]+=c(n,n/i,b[j]);
}
}
} for(int i=1;i<=4;i++) {
m[i]=(mod-1)/b[i];
}
int ans=0;
for(int i=1;i<=4;i++) {
ans+=a[i]*m[i]%(mod-1)*inv(m[i],b[i])%(mod-1);
}
ans%=(mod-1); cout<<qpow(g,ans)%mod<<endl; //fclose(stdin);
//fclose(stdout);
return 0;
}

Luogu-2480 古代猪文的更多相关文章

  1. luogu 2480 古代猪文 数论合集(CRT+Lucas+qpow+逆元)

    一句话题意:G 的 sigma d|n  C(n d) 次幂  mod 999911659 (我好辣鸡呀还是不会mathjax) 分析: 1.利用欧拉定理简化模运算 ,将上方幂设为x,则x=原式mod ...

  2. luogu_2480: 古代猪文

    洛谷:2480古代猪文 题意描述: 给定两个整数\(N,G\),求$G^{\sum_{k|n}C_n^k} mod 999911659 $. 数据范围: \(1\leq N\leq 10^9,1\le ...

  3. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

  4. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)

    数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ...

  5. 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 ...

  6. 1951: [Sdoi2010]古代猪文

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2171  Solved: 904[Submit][Status] ...

  7. BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2194  Solved: 919[Submit][Status] ...

  8. 古代猪文:数论大集合:欧拉定理,exgcd,china,逆元,Lucas定理应用

    /* 古代猪文:Lucas定理+中国剩余定理 999911658=2*3*4679*35617 Lucas定理:(m,n)=(sp,tp)(r,q) %p 中国剩余定理:x=sum{si*Mi*ti} ...

  9. [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)

    [SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...

  10. BZOJ 1951 【SDOI2010】 古代猪文

    题目链接:古代猪文 好久没写博客了,这次就先写一篇吧…… 题面好鬼……概括起来就是:给出\(N,G(\leqslant 10^9)\),求:\[G^{\sum_{d|n}\binom{n}{d}} \ ...

随机推荐

  1. WPF相关UI库

    免费控件库: 1.Extended WPF Toolkit 官方拓展控件 http://wpftoolkit.codeplex.com/ 2.avalondock 可停靠布局(wpf toolkit包 ...

  2. Kafka实战宝典:Kafka的控制器controller详解

    一.控制器简介 控制器组件(Controller),是 Apache Kafka 的核心组件.它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群.集群中任意一 ...

  3. dubbo学习(十)spring boot整合dubbo

    工程搭建与配置 生产者 1.创建一个生产者的spring boot工程,配置好依赖,并把接口实现类文件夹复制到新的工程里 2.pom.xml配置dubbo的相关依赖 <!-- Dubbo Spr ...

  4. Jboss未授权访问漏洞复现

    一.前言 漏洞原因:在低版本中,默认可以访问Jboss web控制台(http://127.0.0.1:8080/jmx-console),无需用户名和密码. 二.环境配置 使用docker搭建环境 ...

  5. IIS网站建立好后如何更改绑定IP或端口号

    写在前面的话 我们利用IIS建立网站的时候,一般都是设定好网站名称和物理地址,直接下一步建立完成了.正常访问都没问题,但如果我们这时候想要更改访问的IP或者端口号,打开了很多设置项就是没找到设置的地方 ...

  6. ksoap2-android的简单使用

    soap2-android 官网地址 https://simpligility.github.io/ksoap2-android/index.html 发行版本 https://oss.sonatyp ...

  7. Dotnet Core IHttpClientFactory深度研究

    今天,我们深度研究一下IHttpClientFactory.   一.前言 最早,我们是在Dotnet Framework中接触到HttpClient. HttpClient给我们提供了与HTTP交互 ...

  8. Python练习题 035:Project Euler 007:第10001个素数

    本题来自 Project Euler 第7题:https://projecteuler.net/problem=7 # Project Euler: Problem 7: 10001st prime ...

  9. SQL实战——01. 查找最晚入职员工的所有信息

    查找最晚入职员工的所有信息CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_n ...

  10. IOS 数据储存

    IOS 数据存储 ios数据存储包括以下几种存储机制: 属性列表 对象归档 SQLite3 CoreData AppSettings 普通文件存储 1.属性列表 // //  Persistence1 ...