CH 0101 - a^b / CH 0102 - 64位整数乘法 - [快速幂和快速乘]


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=1, base=a%mod;
    while(n)
    {
        if(n&1) res*=base, res%=mod;
        base*=base, base%=mod;
        n>>=1;
    }
    return res%mod;
}
int main()
{
    cin>>a>>b>>mod;
    cout<<fpow(a,b)<<endl;
}

 


0102 64位整数乘法

题目链接:传送门

描述

求 a 乘 b 对 p 取模的值,其中 1≤a,b,p≤10^18。

输入格式

第一行 a,第二行 b,第三行 p。

输出格式

一个整数,表示 a*b mod p 的值。

样例输入
2
3
9

样例输出
6

题解:

和快速幂是一样的思路。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,mod;
ll fmul(ll a,ll n)
{
    ll res=0, base=a%mod;
    while(n)
    {
        if(n&1) res+=base, res%=mod;
        base+=base, base%=mod;
        n>>=1;
    }
    return res%mod;
}
int main()
{
    cin>>a>>b>>mod;
    cout<<fmul(a,b)<<endl;
}

 

posted @ 2018-11-14 15:18  Dilthey  阅读(377)  评论(0编辑  收藏  举报