描述

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 游戏之合成(快速幂快速乘)的更多相关文章

  1. HDU 4549 矩阵快速幂+快速幂+欧拉函数

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  2. 取模性质,快速幂,快速乘,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 ...

  3. ACM:a^b%p-数论-快速幂-快速乘

    a^b Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: Description 求a的b次方,取模mod(1<=a,b ...

  4. BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘

    2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...

  5. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  6. HDU 5607 graph 矩阵快速幂 + 快速幂

    这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...

  7. 快速幂&快速乘法

    尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧 快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位 ...

  8. 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). ...

  9. hdu4549 M斐波那契数列 矩阵快速幂+快速幂

    M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的 ...

随机推荐

  1. Photoshop 辅助线和标尺的使用技巧

    1.拖动辅助线时按住Alt键可以在水平辅助线和垂直辅助线之间切换.按住Alt键点击一条已经存在的垂直辅助线可以把它转为水平辅助线,反之亦然. 注意:辅助线是通过从标尺中拖出而建立的,所以要确保标尺是打 ...

  2. python中pop()函数的用法

    pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法:list.pop(obj=list[-1]) //默认为 index=-1,删除最后一个列表值. obj -- ...

  3. ABAP-1-会计凭证批量数据导入本地ACCESS

    公司会计凭证导入ACCESS数据库,需要发送给审计,原先的方案是采用DEPHI开发的功能(调用函数获取会计凭证信息,然后INSERT到ACCESS数据表),运行速度非常慢,业务方要求对该功能进行优化, ...

  4. Mongo 应用查询

    官网操作手册,基本就够用 https://docs.mongodb.com/manual/ 下面是个分组查询的例子,项目中用到然后查了个例子,自己理解了下,觉得很好很强大. https://blog. ...

  5. Python爬虫示例

    #!/usr/bin/python #coding:utf8 import re import urllib def gethtml(url): page=urllib.urlopen(url) ht ...

  6. Haskell语言学习笔记(91)Comprehension Extensions

    Comprehension Extensions 关于解析式的相关语言扩展. List and Comprehension Extensions 24 Days of GHC Extensions: ...

  7. 【365】拉格朗日乘子法与KKT条件说明

    参考:知乎回答 - 通过山头形象描述 参考:马同学 - 如何理解拉格朗日乘子法? 参考: 马同学 - 如何理解拉格朗日乘子法和KKT条件? 参考:拉格朗日乘数 - Wikipedia 自己总结的规律 ...

  8. LeetCode OJ 47. Permutations II

    题目 Given a collection of numbers that might contain duplicates, return all possible unique permutati ...

  9. Android EventBus3.x 使用详解

    ♪(^∇^*) 五一假期在家无事,新项目中用的是RxJava2+EventBus感觉还不错,趁这闲暇总结下EventBus. 一.概要简述 EventBus是一个基于观察者模式的Android事件发布 ...

  10. flume 详细介绍

    http://blog.csdn.net/a2011480169/article/details/51544664 配有详细的例子. http://www.cnblogs.com/gongxijun/ ...