大数取模的两道题. 虐狗宝典学习笔记: 两个数值执行算术运算时,以参与运算的最高数值类型为基准,与保存结果的变量类型无关.两个32位整数的成绩可能超过int类型的表示范围,但是CPU只会用一个32位寄存器保存结果,造成越界,此时我们必须把其中一个数强制转换成64位整数类型long long参与运算.得到正确的结果,取模后,执行赋值操作时,该结果会被隐式转换成int存回. CH0101---a^b #include <bits/stdc++.h> #define inf 0x3f3f3f3f u…
题目链接:传送门    //a^b   传送门    //64位整数乘法 题目: 描述 求 a 的 b 次方对 p 取模的值,其中 ≤a,b,p≤^ 输入格式 三个用空格隔开的整数a,b和p. 输出格式 一个整数,表示a^b mod p的值. 样例输入 样例输出 模板:(快速幂) #include <bits/stdc++.h> using namespace std; int fpow(int a, int b, int p) { ; ) { ) ans = (1LL * ans * a)…
正解:数论/一个神仙想法 解题报告: 先放传送门qwq 两种方法,都还挺妙的就都写了qwq 第一种是快速幂 把b用二进制表示成,ck*2k+ck-1*2k-1+...+c0*20 然后就可以表示成,a*(ck*2k+ck-1*2k-1+...+c0*20)%p 然后就可以用快速幂的思想做掉,能理解趴? 哦其实也可以用秦九韶理解,差不多,反正都这个意思就是了qwq #include<bits/stdc++.h> using namespace std; #define rp(i,x,y) for…
0101 a^b 题目链接:传送门 描述 求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9 输入格式 三个用空格隔开的整数 a,b 和 p. 输出格式 一个整数,表示 a^b mod p 的值. 样例输入 2 3 9 样例输出 8 题解: 快速幂. AC代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ll a,b,mod; ll fpow(ll a,ll n) { ll res=,…
求a*b%p的值. 0<a,b,p<1e18; 原题链接 #include<bits/stdc++.h> #define ull unsigned long long using namespace std; int main() { ull a,b,c,ans=0; cin>>a>>b>>c; a%=c,b%=c; while(b) { if(b&1)ans=(ans+a)%c; b=b>>1; a=a<<1;…
在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647.而unsigned范围是[0,2^32),即0~4294967295.也就是说,常规的32位整数只能够处理40亿以下的数. 那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了.不同的编译器对64位整数的扩展有所不同.基于ACM的需要,下面仅介绍VC6.0与g++编译器的扩展. VCVC6.0的64…
C/C++中的64位整数(__int64 and long long) 在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647.而unsigned范围是[0,2^32),即0~4294967295.也就是说,常规的32位整数只能够处理40亿以下的数. 那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了.不同的编译器对64位整数的扩展有所不同.基于ACM…
#include <iostream> #include <ctime> using namespace std; int main() { cout << cout << cout << sizeof(__int64) << endl;//8 //time_t在64位上为__time64_t,为__int64与long long相似,在32位上为long //time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒…
尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧 快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位为1的话,就将答案乘以现在的数.快速乘法类似,只是将a*x看作x个a相加. 代码 #include<cstdio> #include<iostream> using namespace std; int mi(int a,int x) { ; ;x>>=,now=now*n…
传送门 zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 575    Accepted Submission(s): 181 Problem Description As one of the most powerful brushes, zhx is required to give his juniors…