P2480 [SDOI2010]古代猪文

题目背景

“在那山的那边海的那边有一群小肥猪。他们活泼又聪明,他们调皮又灵敏。他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……”

——选自猪王国民歌

很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国。猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了。因此也很少有其他动物知道这样一个王国。

猪王国虽然不大,但是土地肥沃,屋舍俨然。如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了。猪王勤政爱民,猪民安居乐业,邻里和睦相处,国家秩序井然,经济欣欣向荣,社会和谐稳定。和谐的社会带给猪民们对工作火红的热情和对未来的粉色的憧憬。

小猪iPig是猪王国的一个很普通的公民。小猪今年10岁了,在大肥猪学校上小学三年级。和大多数猪一样,他不是很聪明,因此经常遇到很多或者稀奇古怪或者旁人看来轻而易举的事情令他大伤脑筋。小猪后来参加了全猪信息学奥林匹克竞赛(Pig Olympiad in Informatics, POI),取得了不错的名次,最终保送进入了猪王国大学(Pig Kingdom University, PKU)深造。

现在的小猪已经能用计算机解决简单的问题了,比如能用P++语言编写程序计算出A + B的值。这个“成就”已经成为了他津津乐道的话题。当然,不明真相的同学们也开始对他刮目相看啦~

小猪的故事就将从此展开,伴随大家两天时间,希望大家能够喜欢小猪。

题目描述

猪王国的文明源远流长,博大精深。

iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N。当然,一种语言如果字数很多,字典也相应会很大。当时的猪王国国王考虑到如果修一本字典,规模有可能远远超过康熙字典,花费的猪力、物力将难以估量。故考虑再三没有进行这一项劳猪伤财之举。当然,猪王国的文字后来随着历史变迁逐渐进行了简化,去掉了一些不常用的字。

iPig打算研究古时某个朝代的猪文文字。根据相关文献记载,那个朝代流传的猪文文字恰好为远古时期的k分之一,其中k是N的一个正约数(可以是1和N)。不过具体是哪k分之一,以及k是多少,由于历史过于久远,已经无从考证了。

iPig觉得只要符合文献,每一种能整除N的k都是有可能的。他打算考虑到所有可能的k。显然当k等于某个定值时,该朝的猪文文字个数为N / k。然而从N个文字中保留下N / k个的情况也是相当多的。iPig预计,如果所有可能的k的所有情况数加起来为P的话,那么他研究古代文字的代价将会是G的P次方。

现在他想知道猪王国研究古代文字的代价是多少。由于iPig觉得这个数字可能是天文数字,所以你只需要告诉他答案除以999911659的余数就可以了。

输入输出格式

输入格式:

输入文件ancient.in有且仅有一行:两个数N、G,用一个空格分开。

输出格式:

输出文件ancient.out有且仅有一行:一个数,表示答案除以999911659的余数。

输入输出样例

输入样例#1:

4 2

输出样例#1:

2048

说明

数据规模

10%的数据中,1 <= N <= 50;

20%的数据中,1 <= N <= 1000;

40%的数据中,1 <= N <= 100000;

100%的数据中,1 <= G <= 1000000000,1 <= N <= 1000000000。

————————————————————————————————————————————————————————————————
数论大模板

就是求$G^{\sum\limits_{d|N}{C_N^d}}(\mod999911659)$

G=999911659时上式等于0,否则由欧拉定理得$G^{\sum\limits_{d|N}{C_N^d}}≡G^{\sum\limits_{d|N}{C_N^d\mod999911659}}(\mod999917659)$

$999917659=2*3*4678*35617$,枚举N的约数d,Lucas定理求组合数$C_{N}^{d}$,分别计算出$\sum\limits_{d|N}C_N^d$对2,3,4679,35617取模的结果,记为a1,a2,a3,a4

中国剩余定理求解线性同余方程组

$x\mod2=a1$

$x\mod3=a2$

$x\mod4769=a3$

$x\mod35617=a4$

最后快速幂求$G^x$

code

#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector>typedef long long LL;
typedef double db;
const int MAXN = 1000010;
LL N, G;
LL f[MAXN]={1}, a[4] = {2, 3, 4679, 35617}, b[MAXN];inline LL read() {LL num = 0, f = 1; char ch = getchar();while (!isdigit(ch)) {if (ch == '-') f = -1; ch = getchar();}while (isdigit(ch)) {num = num * 10 + ch - '0'; ch = getchar();}return num * f;
}LL FastPow(LL a, LL b, LL MO) {LL ans = 1, base = a;while (b) {if (b & 1) ans = ans * base % MO;base = base * base % MO;b >>= 1;} return ans;
}LL C(LL n, LL m, LL p) {if (n < m) return 0;return f[n] * FastPow(f[n - m] * f[m], p - 2, p) % p;
}LL Lucas(LL n, LL m, LL p) {if (m == 0) return 1;return C(n % p, m % p, p) * Lucas(n / p, m / p, p) % p;
}LL CRT() {LL ans = 0, MO = 999911658;for (int i = 0; i < 4; ++ i) {LL t = MO / a[i];ans = (ans + 1LL*b[i]*t%MO * FastPow(t,a[i]-2,a[i])%MO) % MO;} return ans;
}
int main() {N = read(); G = read();if (G == 999911659) {std::cout << "0" << std::endl;return 0;}for (int i = 0; i < 4; ++ i) {f[0] = 1;for (int j = 1; j <= a[i]; ++ j) f[j] = f[j - 1] * j % a[i];for (int j = 1; j * j <= N; ++ j) {if (N % j) continue;b[i] = (b[i] + Lucas(N, j, a[i])) % a[i];if (N / j == j) continue;b[i] = (b[i] + Lucas(N, N / j, a[i])) % a[i];}}LL ans = FastPow(G, CRT(), 999911659);std::cout << ans << std::endl;return 0;
}

转载于:https://www.cnblogs.com/hkttg/p/9444542.html

P2480 [SDOI2010]古代猪文相关推荐

  1. P2480 [SDOI2010]古代猪文(数论好题)

    P2480 [SDOI2010]古代猪文 题意: 给你n和g,求g∑d∣nCndmodpg^{\sum_{d|n}C_{n}^{d}}\bmod pg∑d∣n​Cnd​modp p=999911659 ...

  2. P2480 [SDOI2010]古代猪文 Lucas+CRT合并

    \(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长,博大精深. iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N.当然,一种语言如果字数很多,字典也相应会 ...

  3. 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)

    传送门 好吧我数学差的好像不是一点半点-- 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...

  4. 1951: [Sdoi2010]古代猪文

    http://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意:求G^(C(N,N/K))%mod ( K|N) 1951: [Sdoi2010]古代猪 ...

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

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

  6. [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  7. bzoj1951 [Sdoi2010]古代猪文

    http://www.elijahqi.win/archives/3185 Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿 ...

  8. BZOJ1951: [Sdoi2010]古代猪文

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  9. BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】...

    题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...

最新文章

  1. iOS - OC NSSize 尺寸
  2. 2019秋季PAT甲级_C++题解
  3. 微信朋友圈,QQ空间,微博等列表展示的功能实现
  4. 模p加法和模p乘法学习
  5. 2021夏季每日一题 【week5 完结】
  6. ubuntu java 编译器_Ubuntu 16.04配置Java开发环境
  7. Timus 1049 Brave Balloonists
  8. ubuntu12.04安装及配置过程详解1
  9. [Uva10641]Barisal Stadium(区间dp)
  10. Spring @Transactional注解浅谈
  11. ros加载编译opencv-3.4.9,编译安装opencv-3.4.9
  12. 如何编写高质量的代码二 - 类的设计
  13. icesat2 重要参数
  14. ProcExp的利用
  15. PMP 备考指南之计算题汇总
  16. 用excel数据批量填充word表格
  17. 计算机故障诊断知识,故障诊断
  18. PSP《大众高尔夫2P》XB资源包算法分析(2)
  19. 利用Python turtle库制作夜空
  20. 连接网络显示dns服务器不可用,上不了网,提示DNS服务器不可用如何解决

热门文章

  1. html纯css页面滑动效果,纯css3滑动按钮动画效果
  2. 网络推广方法带你了解优质的网站结构对网站SEO有什么好处?
  3. 网站如何才能吸引用户,增加网站点击率?
  4. 企业网络推广——浅析企业网络推广怎样看待企业网站的制作
  5. php 接口 2.0,YII 2.0 API接口开发
  6. linux 软链接_Linux 中软链接和硬链接的区别 | Linux 中国
  7. 开发日记-20190719 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 12
  8. 开发日记-20190509
  9. ARIMA模型实例讲解——网络流量预测可以使用啊
  10. shingling算法——提取特征,m个hash函数做指纹计算,针对特征hash后变成m维向量,最后利用union-find算法计算相似性...