TZOJ 5291 游戏之合成(快速幂快速乘)
描述
zzx和city在玩一款小游戏的时候,游戏中有一个宝石合成的功能,需要m个宝石才可以合成下一级的宝石(例如需要m个1级宝石才能合成2级宝石)。
这时候zzx问city说“我要合成A级宝石需要多少个B级的宝石(A>B)。”
city说:“这数字会好大的。”
zzx:“没事的,你选择一个数取余数就行了,你只要告诉我余数就好了”
city:“那就对梅森素数取余好了”
但最后,由于数字过于大,city又不想手算了,于是想请你帮忙。
输入
多组数据,输入到文件结束为止
每组输入4个正数m,A,B,K,m,A,B为题目描述的意思,K为对第K个梅森素数取余
数据保证M,A,B不会大于第K个梅森素数(K<10)
输出
一个整数为合成A级宝石需要多少个B级的宝石对第K个梅森素数取余的结果
样例输入
5 5 1 2
4 4 1 2
样例输出
2
1
提示
1.第一组样例解释:合成5级宝石需要5个4级的宝石,合成5个4级宝石需要25个3级宝石,以此类推,合成5级宝石需要625颗1级宝石,第2个梅森素数为7,625除7余2.
2.输入输出数据过于庞大,c++输入输出你应该使用scanf和printf,而不是cin和cout
3.梅森素数是由梅森数而来。所谓梅森数,是指形如2p-1的一类数,其中指数p是素数,常记为Mp 。如果梅森数是素数,就称为梅森素数。
梅森素数表
|
序号 |
p |
Mp=(2p)-1 |
Mn的位数 |
发现时间 |
发现者 |
|
1 |
2 |
3 |
1 |
古代 |
古人 |
|
2 |
3 |
7 |
1 |
古代 |
古人 |
|
3 |
5 |
31 |
2 |
古代 |
古人 |
|
4 |
7 |
127 |
3 |
古代 |
古人 |
|
5 |
13 |
8191 |
4 |
1456年 |
无名氏 |
|
6 |
17 |
131071 |
6 |
1588年 |
Cataldi |
|
7 |
19 |
524287 |
6 |
1588年 |
Cataldi |
|
8 |
31 |
2147483647 |
10 |
1772年 |
欧拉 |
|
9 |
61 |
2305843009213693951 |
19 |
1883年 |
Pervushin |
|
10 |
89 |
618970019642690137449562111 |
27 |
1911年 |
Powers |
题意
输出合成A级宝石需要多少个B级的宝石对第K个梅森素数取余后的值
题解
典型的快速乘+快速幂m^(A-B)%f[k],f[k]代表第k个梅森素数
这题当时是比赛的时候做的题,不会存第9个梅森素数所以没做出来
这个题有3个坑:
1.存第9个梅森素数(2305843009213693951LL)
2.m^(A-B)其中A-B太大会超时(快速幂)
3.第9个素数相乘超过19位爆int64(快速乘)
代码
#include<stdio.h>
__int64 multi(__int64 m,__int64 n,__int64 mod){
__int64 ans=;
while(n){
if(n&)ans+=m;
m=(m+m)%mod;
m%=mod;
ans%=mod;
n>>=;
}
return ans;
}
__int64 pow(__int64 a,__int64 n,__int64 mod){
__int64 ans=;
while(n){
if(n&)ans=multi(ans,a,mod);
a=multi(a,a,mod);
ans%=mod;
a%=mod;
n>>=;
}
return ans;
}
int main(){
__int64 f[]={,,,,,,,,,2305843009213693951LL};//存19位最后加LL
__int64 m,a,b,k;
while(scanf("%I64d%I64d%I64d%I64d",&m,&a,&b,&k)!=EOF){
m%=f[k];
printf("%I64d\n",pow(m,a-b,f[k]));
}
return ;
}
TZOJ 5291 游戏之合成(快速幂快速乘)的更多相关文章
- HDU 4549 矩阵快速幂+快速幂+欧拉函数
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- 取模性质,快速幂,快速乘,gcd和最小公倍数
一.取模运算 取模(取余)运算法则: 1. (a+b)%p=(a%p+b%p)%p; 2.(a-b)%p=(a%p-b%p)%p; 3.(a*b)%p=(a%p * b%p)%p; 4.(a^b)%p ...
- ACM:a^b%p-数论-快速幂-快速乘
a^b Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: Description 求a的b次方,取模mod(1<=a,b ...
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...
- BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘
题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...
- HDU 5607 graph 矩阵快速幂 + 快速幂
这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...
- 快速幂&快速乘法
尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧 快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位 ...
- A^B mod C (快速幂+快速乘+取模)题解
A^B mod C Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63). ...
- hdu4549 M斐波那契数列 矩阵快速幂+快速幂
M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的 ...
随机推荐
- curl发送xml , xml和数组互转
public function postXml($url, array $data) { // pack xml $xml = $this->arrayToXml($data); // curl ...
- 机器学习进阶-图像梯度计算-scharr算子与laplacian算子(拉普拉斯) 1.cv2.Scharr(使用scharr算子进行计算) 2.cv2.laplician(使用拉普拉斯算子进行计算)
1. cv2.Scharr(src,ddepth, dx, dy), 使用Scharr算子进行计算 参数说明:src表示输入的图片,ddepth表示图片的深度,通常使用-1, 这里使用cv2.CV_6 ...
- c#从基础学起string.Join(",", keys.ToArray())
总感觉自己工作6年了,经验丰富.直到近期报了一个.net进阶班才知道.我还差得很远.就拿string.join对比 我的代码: public static int InsertModel<T&g ...
- jquery 属性-记住
$("").attr(); $("").removeAttr(); $("").prop(); $("").remove ...
- WDA-6-EP系统管理/内容管理/用户管理
主要是将EP端系统管理.内容管理.用户管理相关内容进行下梳理. 1.系统管理 1.1系统前景 1.2对象锁定 解锁相关对象 2.内容管理 2.1基本介绍 门户桌面-组件: 四大内容: iViews:可 ...
- fopen函数出现段错误
昨天写代码的时候突然发现了一个问题,当使用fopen("<filepath>", "r")时,如果filepath不存在,那么fopen函数并不是像 ...
- 虚拟机安装VMware tools
选择虚拟机菜单栏--安装VMware tools 2 然后在CentOS系统中弹出的VMware tools窗口中 右击VMwaretools-9.6.0-1294478.tar.gz 解压缩到 3 ...
- LG Optimus L90 [D415] T-Mobile 刷机
1 先使用[ROOT大师]ROOT手机. 2 执行以下ADB命令. adb shell su //备份 dd /by-name/laf of=/sdcard/laf.img. //清除 dd /by- ...
- match()方法解析
match()方法支持正则表达式的String对象的方法. 上篇我说了search()方法,也支持正则表达式的String对象,那么match()方法跟search()方法有什么不同呢?我们来看看. ...
- [原创]delphi在win7下创建共享文件夹源代码
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...