位运算模板

发布时间 2023-07-12 21:14:46作者: 未抑郁的刘大狗

【模板】快速幂 | 取余运算

题目描述

给你三个整数 a,b,p,求abmod p

输入格式

输入只有一行三个整数,分别代表 a,b,p

输出格式

输出一行一个字符串 a^b mod p=s,其中 a,b,p分别为题目给定的值, s 为运算结果。

样例 #1

样例输入 #1


2 10 9

样例输出 #1


2^10 mod 9=7

提示

样例解释

210 = 10241024 mod 9 = 7

数据规模与约定

对于 100% 的数据,保证 a,b ≤ 231a+b>0p ≤ 231

AC Code


#include<bits/stdc++.h>
using namespace std;
unsigned long long a,b,k,ans=1;
long long js(long long a,long long b,long long k){
	while(b!=0){
		if(b&1)
			ans=ans*a%k;
		a=a*a%k;
		b>>=1;
	}return ans;
}
int main(){
	cin>>a>>b>>k;
	ans=js(a,b,k);
	cout<<a<<"^"<<b<<" mod "<<k<<"="<<ans<<endl;
	return 0;
}



【模板】64 位整数乘法

题目描述

abk取模的值,其中1≤*a,b,k≤1018

输入

     输入:一行:a,b,k

输出

     一个数字,为答案

样例输入


 6 2 7

样例输出


 5

AC code


#include <bits/stdc++.h>
using namespace std;
unsigned long long a, b, k, ans;
int main()
{
    cin >> a >> b >> k;
    while (b != 0) {
        if (b & 1)
            ans = (ans + a) % k;
        a = a * 2 % k;
        b >>= 1;
    }
    cout << ans << endl;
    return 0;
}