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 ...
随机推荐
- 什么是SPU、SKU、SKC、ARPU
首先,搞清楚商品与单品的区别.例如,iphone是一个单品,但是在淘宝上当很多商家同时出售这个产品的时候,iphone就是一个商品了. 商品:淘宝叫item,京东叫product,商品特指与商家有关的 ...
- NodeJs之项目构建(对文件及文件夹的操作)
前提:需要使用:require('fs')引入外部模块 简单的模仿创建一个文件下有多个文件. 首先,准备一个主文件夹 然后,准备放在这个主文件夹下的文件加 在代码中通过对象,数字,json对象来装 代 ...
- java反射专题二
一丶Class中常用方法详解 1)getFields() 只能获取到运行时类中及其父类中声明为public的属性 2)getDeclaredFields() 获取运行时类本身声明的所有属性 3)get ...
- oracle 在xml中批量插入,批量修改及多组条件查询
最近公司用ibatis开发项目,本来可以用存储过程处理批量插入,批量修改及多组条件查询:但由于使用模块相对较小,暂时就在xml中配置,以前没有在xml做过类似处理,有必要记录一下:好了,代码如下: & ...
- C语言学习笔记--内存分区
1. 程序中的栈 1.1 栈的简介 (1)栈中现代计算机程序里最为重要的概念之一 (2)栈在程序中用于维护函数调用上下文 (3)函数中的参数和局部变量存储在栈上 (4)栈保存了一个函数调用所需的维护信 ...
- div盒子模型
<style type="text/css"> div{ width:300px; height:300px; background:green; margin:10p ...
- Class类动态加载类的用法
编译时刻加载类出现的问题:一个功能有错,所有功能都用不了 动态加载类:
- 定位程序问题出现的原因工具-jstack
jstack还可以生成线程快照 如何使用jstack: 1.打开命令行,输入jstack 在任务管理器中就可看到对应进程id 2.在命令行中输入 jstack -l 进程id 这样就可得到进程中所有的 ...
- Flow Layout
--------------siwuxie095 将根面板 contentPane 的布局切换为 Flow Layout Flow La ...
- Easyui datebox单击文本框显示日期选择 eayui版本1.5.4.1
Easyui默认是点击文本框后面的图标显示日期,体验很不好,所以我想单击文本框就显示日期选择框,网上很多版本是1.3,1.4的,于是自己就比葫芦画瓢改了一个1.5.4.1的版本. 我参考了网上这个帖子 ...