位运算基础知识



题目练手



题意及思路:


代码:

/*
2^1 = 2
2^2 = 4
2^4 = 16;
2^8 = 16*16
*/
#include <iostream>

using namespace std;

int main(){
    int a,b,p;
    cin >> a >> b >> p;
    int ans = 1%p;
    while(b){
        if(b&1) ans = ans*1ll*a % p;
        a = a*1ll*a %p;
        b >>= 1;
    }
    cout << ans << endl;
    
    return 0;
}



题意及思路:


代码:

/*
*/

#include <iostream>

using namespace std;

typedef unsigned long long ull;

int main(){
    ull a,b,p;
    cin >> a >> b >> p;
    ull ans = 0;
    while(b){
        if(b&1) ans = (ans+a) %p;
        a = a*2 %p;
        b >>= 1;
    }
    cout << ans << endl;
    return 0;
}