[题解] [SDOI2010] 古代猪文
题面
题解
题目所求即为
\]
考虑到有这样一个式子
\]
由于999911659是一个质数, 所以\(\varphi(999911659) = 999911658\), 所以原式就变为了
\]
左边的东西只要求出\(\sum_{d | n} C_n^d \bmod 999911568\)即可快速幂, 所以题目转化为求左式
我们发现\(999911568 = 2 * 3 * 4257 * 35617\), 恩, 组合数取模求和, 上\(exLucas\)板子即可
Code
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#define itn int
#define reaD read
#define Mod 999911659
#define int long long
using namespace std;
int n, m, mod[4] = { 2, 3, 4679, 35617 }, inv[4][50005], jc[4][50005], r[4];
inline int read()
{
int x = 0, w = 1; char c = getchar();
while(c < '0' || c > '9') { if (c == '-') w = -1; c = getchar(); }
while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
return x * w;
}
int fpow(int x, int y)
{
int res = 1;
while(y)
{
if(y & 1) res = res * x % Mod;
x = x * x % Mod;
y >>= 1;
}
return res;
}
int exgcd(int a, int b, int &x, itn &y)
{
if(!b) { x = 1; y = 0; return a; }
int q = a / b, r = a % b, d = exgcd(b, r, y, x);
y -= q * x; return d;
}
itn C(int n, int m, int opt)
{
if(m > n) return 0; if(m > n - m) m = n - m;
return 1ll * jc[opt][n] * inv[opt][m] % mod[opt] * inv[opt][(n - m)] % mod[opt];
}
int lucas(int n, int m, int opt)
{
if(!m) return 1;
return 1ll * C(n % mod[opt], m % mod[opt], opt) * lucas(n / mod[opt], m / mod[opt], opt) % mod[opt];
}
int excrt()
{
int p1 = mod[0], r1 = r[0];
for(int j = 1; j < 4; j++)
{
int p2 = mod[j], r2 = r[j], x, y, d = exgcd(p1, p2, x, y);
x *= (r2 - r1) / d; p2 /= d; x = (x % p2 + p2) % p2;
r1 = p1 * x + r1; p1 = p1 * p2;
}
return r1;
}
int exlucas()
{
for(int i = 1; i * i <= n; i++)
if(n % i == 0)
{
if(i * i == n) for(int j = 0; j < 4; j++) r[j] = 1ll * (r[j] + lucas(n, i, j)) % mod[j];
else for(int j = 0; j < 4; j++) r[j] = 1ll * (r[j] + lucas(n, i, j) + lucas(n, n / i, j)) % mod[j];
}
return excrt();
}
signed main()
{
n = read(); m = read();
if(m % 999911659 == 0) { puts("0"); return 0; }
for(int i = 0; i <= 3; i++)
{
inv[i][0] = inv[i][1] = 1; jc[i][0] = jc[i][1] = 1;
for(int j = 2; j < mod[i]; j++) inv[i][j] = 1ll * (mod[i] - mod[i] / j) * inv[i][mod[i] % j] % mod[i];
for(int j = 2; j < mod[i]; j++) inv[i][j] = 1ll * inv[i][j - 1] * inv[i][j] % mod[i];
for(int j = 2; j < mod[i]; j++) jc[i][j] = 1ll * jc[i][j - 1] * j % mod[i];
}
printf("%lld\n", fpow(m, exlucas()));
return 0;
}
[题解] [SDOI2010] 古代猪文的更多相关文章
- 【题解】古代猪文 [SDOI2010] [BZOJ1951] [P2480]
[题解]古代猪文 [SDOI2010] [BZOJ1951] [P2480] 在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心 ...
- 【题解】P2480 [SDOI2010]古代猪文 - 卢卡斯定理 - 中国剩余定理
P2480 [SDOI2010]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...
- 【BZOJ1951】[SDOI2010]古代猪文
[BZOJ1951][SDOI2010]古代猪文 题面 bzoj 洛谷 题解 题目实际上是要求 $ G^{\sum d|n\;C_n^d}\;mod \; 999911659 $ 而这个奇怪的模数实际 ...
- 【BZOJ1951】[Sdoi2010]古代猪文 Lucas定理+CRT
[BZOJ1951][Sdoi2010]古代猪文 Description 求$X=\sum\limits_{d|n}C_n^d$,$Ans=G^X (\mod 999911659)$. Input 有 ...
- 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 ...
- 1951: [Sdoi2010]古代猪文
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2171 Solved: 904[Submit][Status] ...
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2194 Solved: 919[Submit][Status] ...
- [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
[SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...
- 洛咕 P2480 [SDOI2010]古代猪文
洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...
随机推荐
- 异常-JDK7针对多个异常的处理方案
package cn.itcast_02; /* * JDK7出现了一个新的异常处理方案: * try{ * * }catch(异常名1 | 异常名2 | ... 变量 ) { * ... * } * ...
- vue打开到新页面,并传递参数
打开新页面,有两种方式, 一种是标签式: <router-link tag="a" target="_blank" :to="{path: '/ ...
- SQL Tuning 基础概述10
在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...
- 解决:Nginx访问静态页面出现中文乱码
需要修改nginx的server的配置内容,增加一行:charset utf-8; 详情如下: upstream you.domainName.com { server 127.0.0.1:8080; ...
- kbmMemTable中怎么根据UniqueRecID定位到对应的记录
function TForm5.LocateUniqueRecID(aDataSet: TkbmMWCustomClientQuery; AID: TkbmNativeInt): Boolean; v ...
- 百度编辑神器ueditor在ajax或form提交内容时候异常
百度编辑神器ueditor在ajax或form提交内容时候异常,一:⑴web.config中<system.web> <httpRuntime requestValidationMo ...
- Win10系统如何利用蓝牙设置动态锁?
很多小伙伴都会有这样的经历,出门之后没走多远,却已然忘记是否锁门,有强迫症的人就会重新返回查看,以确保门是否反锁. 我们在使用电脑时也是这样,遇到事情要临时离开,却忘记是否锁屏,再返回来就耽误时间了. ...
- 7.Netty中 handler 的执行顺序
1.Netty中handler的执行顺序 Handler在Netty中,无疑占据着非常重要的地位.Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码.拦截 ...
- 分布式之Zookeeper一(分布式锁与Zookeeper集群)
说到分布式开发,不得不说的就是zookeeper了:zookeeper官网说到Apache ZooKeeper致力于开发和维护可实现高度可靠的分布式协调的开源服务器.那么zk作为一个协调者的存在,是分 ...
- python zip用法
import requests url = "https://magi.com/search" querystring = {"q":"堕却乡&quo ...