Happy 2004(积性函数、快速幂取模、费马小定理、求因数和)
happy 2004
- 题目
- 积性函数
- 求因数和
- 费马小定理
- 定理
- 取模
- 加减法
- 乘法
- 除法
- 结论
- 推导
- 快速幂取模
- 快速幂
- 快速幂取模
- 题目代码
- 坑点
题目
Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004X. Your job is to determine S modulo 29 (the rest of the division of S by 29).
Take X = 1 for an example. The positive integer divisors of 20041 are 1, 2, 3, 4, 6, 12, 167, 334, 501, 668, 1002 and 2004. Therefore S = 4704 and S modulo 29 is equal to 6.
Input
The input consists of several test cases. Each test case contains a line with the integer X (1 <= X <= 10000000).
A test case of X = 0 indicates the end of input, and should not be processed.
Output
For each test case, in a separate line, please output the result of S modulo 29.
Sample Input
1
10000
0
Sample Output
6
10
积性函数
本题中,2004的约数和S(2004x)S(2004^x)S(2004x)就是一个积性函数
积性函数:
p=a×b⇒S(p)=S(a)×S(b)p = a \times b\Rightarrow S(p) = S(a) \times S(b)p=a×b⇒S(p)=S(a)×S(b)
pn=an×bn⇒S(pn)=S(an)×S(bn)p^n = a^n\times b^n\Rightarrow S(p^n) = S(a^n) \times S(b^n)pn=an×bn⇒S(pn)=S(an)×S(bn)
a和b均为质数
求因数和
S(pn)=S(p^n) =S(pn)= pn+1−1p−1{p^{n + 1} - 1}\over{p - 1}p−1pn+1−1
ppp是质数
费马小定理
定理
假如是一个整数aaa
,ppp是一个质数,ap−aa^p - aap−a那么是ppp的倍数,可以表示为
ap%p=aa^p \% p = aap%p=a
如果aaa不是ppp的倍数,这个定理也可以写成
ap−1%p=1a^{p - 1}\%p = 1ap−1%p=1
在本题中,费马小定理的应用为:
aaa与ppp互质时,
有ap−1%p=1a^{p - 1} \% p =1ap−1%p=1
再由同余定理:1%p=11\%p = 11%p=1
可得ap−1%p=1%p=1a^{p-1}\%p = 1\%p = 1ap−1%p=1%p=1
取模
加减法
(a±b)%p=a%p±b%p(a \pm b)\%p = a\%p \pm b\%p(a±b)%p=a%p±b%p
乘法
(a×b)%p=(a%p)×(b%p)%p(a \times b) \% p = (a\%p) \times (b \% p) \%p(a×b)%p=(a%p)×(b%p)%p
除法
//不能直接分配了,要转化成乘法再做
结论
(ab)%c=(a×bc−2)%c(\frac{a}{b})\% c = (a \times b^{c - 2}) \% c(ba)%c=(a×bc−2)%c
推导
(ab)%c=(a×b−1)%c=(a×b−1×1)%c(\frac{a}{b})\% c = (a \times b^{-1}) \% c = (a \times b^{-1} \times 1 ) \%c(ba)%c=(a×b−1)%c=(a×b−1×1)%c
(a×b−1×bc−1)%c=(a×bc−2)%c(a \times b^{-1} \times b^{c - 1}) \% c = (a \times b^{c - 2}) \% c(a×b−1×bc−1)%c=(a×bc−2)%c
快速幂取模
快速幂
求xnx^nxn
int pow(int x,int n)
{int ans = 1,base = x;while(n){if(n & 1)ans *= base;base *= base;n >>= 1;}return ans;
}
快速幂取模
求xn%px^n\%pxn%p
int pow_mod(int x, int n, int p)
{int base = x, ans = 1;while(n){if(n & 1) ans *= base;base = (base * base) % p;n >>= 1;}return ans % p;
}
题目代码
#include <stdio.h>
long long int pow_mod(int x,int b);
int cal(int x);
int main()
{int x[100],s[100];int counter = 0,i;scanf("%d",x);while(x[counter] != 0){s[counter] = cal(x[counter]) % 29;//printf("%d\n",s[counter]);counter++;scanf("%d",&x[counter]);}for(i = 0;i < counter;i++)printf("%d\n",s[i]);return 0;
}
int cal(int x)
{int a,b,c;a = (pow_mod(2, 2 * x + 1) - 1 ) % 29;b = (pow_mod(3, x + 1) - 1) * pow_mod(2, 27) % 29;c = (pow_mod(22, x + 1) - 1) * pow_mod(21, 27) % 29;return a * b * c % 29;
}
long long int pow_mod(int x,int b)
{long long int base = x, ans = 1;while(b){if(b & 1) ans *= base;base = (base * base) % 29;b >>= 1;}return ans % 29;
}
坑点
1.取模那里要用long long int,用int 可能会不够长,我用int的时候会出现WA,改成long long int 就accepted了(不过我没想明白为什么不够长,base是不断取模的,按道理来讲,也不会太大啊?)
- 我也不知道这道题happy不happy,反正我是不怎么happy了。。。
总结了多位大佬们的博客,加上自己的一些理解,写了一份给自己看的总结,看不懂就去看看大佬们写的博客吧。这个博客主要还是写给我自己看的,阅读性不太强。
Happy 2004(积性函数、快速幂取模、费马小定理、求因数和)相关推荐
- 洛谷 [P1593 因子和] {快速幂+费马小定理求逆元+求解质因子} 奋斗的珂珂~
题目描述 输入两个整数 a 和 b,求 aba^bab 的因子和. 由于结果太大,只要输出它对 9901 取模的结果. 输入格式 仅一行,为两个整数 a和 b. 输出格式 输出一行一个整数表示答案对 ...
- 快速幂-Jxc军训 (费马小定理+求概率)(2021-08-17)
Jxc军训 题目 在文某路学车中学高一新生军训中,Jxc正站在太阳下站着军姿,对于这样的酷热的阳光,Jxc 表示非常不爽. Jxc将天空看做一个nn的矩阵,此时天上有m朵云,这些云会随机分布在m个不同 ...
- Detachment HDU - 5976(数学+费马小定理求逆元+前缀和前缀积)
题意:给定一个数,让你分成互不相等的n个数(n为自然数),使这些数的乘积最大,输出最大乘积. 题解:本文参考传送门 首先:那就是不能分出1来,因为1乘任何数都是它本身,而因为分出了1,另一部分也变小了 ...
- 第十四届华中科技大学程序设计竞赛 B Beautiful Trees Cutting【组合数学/费马小定理求逆元/快速幂】...
链接:https://www.nowcoder.com/acm/contest/106/B 来源:牛客网题目描述 It's universally acknowledged that there're ...
- HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)
Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) ...
- 51nod 1513-3的幂的和(费马小定理+快速幂)
题目: 求:3^0 + 3^1 +...+ 3^(N) mod 1000000007 Input 输入一个数N(0 <= N <= 10^9) Output 输出:计算结果 Sample ...
- 牛客网j题(快速幂取模阶乘处理贝塔函数费马定理)
传送门 求(贝塔函数运用) Γ(x)=∫01(x−x2)ndx=(n!)2/(2n+1)!\Gamma(x) = \int_0 ^1\ (x-x^2)^{n}dx=(n!)^2/(2n+1) !Γ(x ...
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- 大数取模运算,快速幂取模运算
1.快速幂取模 http://www.cnblogs.com/yinger/archive/2011/06/08/2075043.html 快速幂取模就是在O(logn)内求出a^n mod b的值. ...
最新文章
- springboot 整合redis 实现KeySpaceNotification 键空间通知
- python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...
- 七牛云徐晶:低延迟互动时代看好WebRTC和SRT
- CAN总线技术 | 物理层03 - 采样点
- forms角色验证,以普通用户身份登陆管理页面先弹出警告信息窗口
- 导出excel 数据取一次合理还是分页取合理_一张报表模板替代数百张Excel表格,用它让报表工作更轻松...
- java面向对象相关选择题_java面向对象练习题一
- matlab学习笔记1
- eclipse没有java web,Java-我的Eclipse IDE中缺少Web服务选项
- Atitit 工作流之道 艾提拉著 BPM,即业务流程管理 目录 1. 流程入门 思想 历史 分类	1 第二篇 第2章 初识工作流	2 1.1. 2.3 工作流技术相关规范 2.3.1 W
- 蓝桥杯单片机学习之数码管
- 单位邮箱格式注册,如何申请单位邮箱?
- Python地理地图可视化:plotly连接mapbox多个地理经纬度中心点line+marker
- 9V降压5V低功耗恒压稳压芯片,大电流3A方案和LDO
- Win7系统解决无法打开任务管理器
- 互联网思维之极致思维
- 【简易教程】使用3dmax利用网上免费人物模型来制作人物动作动画
- P4294 [WC2008]游览计划
- 教师节祝福短信:送给有个性的老师
- 模板设计模式的两种方式