luogu2480 [SDOI2010]古代猪文
题意一开始没TM读懂。。。
就是给定一个\(G\le10^{10},N\le10^9\),求\(G^{\sum_{d|n}{n\choose d}}\),对999911659取模
由于999911659是质数,所以上面的数可以对999911658取模
现在问题转化为求\(\sum_{d|n}{n\choose d}\)对999911658取模(然后加个快速幂就行了)
对999911658质因数分解,可得\(999911658=2*3*4679*35617\)
由于次数都是一次,所以对这些数进行卢卡斯定理,然后中国剩余定理合并即可
不错的一道题,综合了好几道数论题一起考
#include <cstdio>
#define int long long
using namespace std;
int g, n, d[2333], tot;
int p, fac[40010], inv[40010];
int exgcd(int a, int b, int x, int y)
{
if (b == 0) { x = 1, y = 0; return x; }
long long res = exgcd(b, a % b, y, x);
y -= a / b * x; return res;
}
struct fuck
{
int x, y;
fuck(int x = 0, int y = 0) : x(x), y(y) {}
};
int qpow(int x, int y)
{
int res = 1;
for (x %= p; y > 0; x = x * x % p, y >>= 1) if (y & 1) res = res * x % p;
return res;
}
int c(int n, int m)
{
if (n < m || m < 0) return 0;
if (n < p && m < p) return fac[n] * inv[m] % p * inv[n - m] % p;
return c(n / p, m / p) * c(n % p, m % p) % p;
}
int work()
{
int ans = 0;
fac[0] = 1;
for (int i = 1; i < p; i++) fac[i] = fac[i - 1] * i % p;
inv[p - 1] = qpow(fac[p - 1], p - 2);
for (int i = p - 1; i >= 1; i--) inv[i - 1] = inv[i] * i % p;
for (int i = 1; i <= tot; i++)
ans = (ans + c(n, d[i])) % p;
return ans;
}
signed main()
{
scanf("%lld%lld", &n, &g);
if (g % 999911659 == 0)
{
printf("0\n");
return 0;
}
for (int i = 1; i * i <= n; i++)
if (n % i == 0)
{
d[++tot] = i;
if (i * i != n) d[++tot] = n / i;
}
long long ans1, ans2, ans3, ans4;
p = 2, ans1 = work();
p = 3, ans2 = work();
p = 4679, ans3 = work();
p = 35617, ans4 = work();
p = 999911659;
printf("%lld\n", qpow(g, (499955829 * ans1 + 333303886 * ans2 + 289138806 * ans3 + 877424796 * ans4) % (p - 1)));
return 0;
}
一开始全WA了一发,#define int long long后95pts,第13个点read1expect 0
后来观察讨论发现是需要判断g和999911659不互质并且指数和p-1不互质的情况了(就是g是999911659倍数情况)
或者就是说\((kp)^{z(p-1)}\)被模成了0^0,然后快速幂返回了1
luogu2480 [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 ...
- 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} ...
- 【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 有 ...
- 洛谷 P2480 [SDOI2010]古代猪文 解题报告
P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...
- 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理
[bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...
随机推荐
- Celery-4.1 用户指南: Concurrency (并发)
简介 Eventlet 的主页对它进行了描述:它是一个python的并发网络库,可以让你更改如何运行你的代码而不是怎么编写代码. 对高可扩展非阻塞IO操作,它使用 epoll或者libevent. C ...
- webscheduler 开源定时服务和延迟服务
源码地址:https://gitee.com/eabeat/webscheduler 架构上采用 asp.net + access ,实现简单的管理界面,可以维护调用API,查看日志等功能.内核采用Q ...
- C语言生成程序问题
问题: 我用VS2013写好C语言程序调试运行后就在debug文件夹下生成了EXE文件,可以在本机运行.但是这个EXE文件在别的没装过VS2013的电脑上就不能直接运行,说丢失MSVCR120D.dl ...
- paramiko分开执行多条命令 不像之前一样使用\n
#!/usr/bin/env python#-*- encoding -*- import paramiko transport = paramiko.Transport(('192.168.11.1 ...
- apache server和tomcat集群配置一:水平负载
下载apache server,最新链接http://archive.apache.org/dist/httpd/binaries/win32 当前实验版本2.2.4 下载apache tomca ...
- Codeforces 1108F (MST Unification) (树上倍增 or 改进 kruksal)
题意:给你一张n个节点和m条边的无向连通图, 你可以执行很多次操作,对某一条边的权值+1(对于每条边,可以不加,可以无限次加),问至少进行多少次操作,可以使这张图的最小生成树变得唯一,并且最小生成树的 ...
- HDU 6397(2018多校第8场1001) Character Encoding 容斥
听了杜教的直播后知道了怎么做,有两种方法,一种构造函数(现在太菜了,听不懂,以后再补),一种容斥原理. 知识补充1:若x1,x2,.....xn均大于等于0,则x1+x2+...+xn=k的方案数是C ...
- sql如何选取两个数据表中的值
一.直接在要选择的数据前面加上数据表的名字就行了 SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Order ...
- SQL 连贯操作 [2]
1.alias 用于设置数据表别名 $user = M('User'); var_dump($user->alias('anothername')->select()); 这时在SQL中的 ...
- latex公式怎么变成图片格式
由于这几天正在复习高中的数学,想写一些博客记录一下,发现数学公式的输入是一个问题,后来知道了latex,去youtube学习了一点入门教程发现挺简单的,不过有一个问题,latex生成的是pdf格式啊, ...