列表

详情


AB28. 快速幂

描述

请你计算 的值。
一共有 q 次询问。

输入描述

第一行输入一个正整数 q ,代表询问次数。
接下来每行输入三个正整数 a,b,p,代表一次询问。
数据范围:

输出描述

对于每次询问,输出一个整数,代表 的值。

示例1

输入:

2
2 2 6
3 4 10

输出:

4
1

原站题解

C++ 解法, 执行用时: 75ms, 内存消耗: 1036KB, 提交时间: 2022-05-05

#include<bits/stdc++.h>
int main()
{
    int n;
    scanf("%d",&n);
    long long a,b,p;
    for(int i=0;i<n;i++)
    {long long sum=1;
        scanf("%lld %lld %lld",&a,&b,&p);
     //a%=p;b%=p;
        while(b>0)
        {
            if(b&1) 
            { sum=sum*a%p;
        } b=b>>1;
            a=a*a%p;
        }
     printf("%lld\n",sum);
    }
    return 0;
}

C++ 解法, 执行用时: 75ms, 内存消耗: 1144KB, 提交时间: 2022-04-18

#include<cstdio>

int main()
{
    int q, a, b, p;
    scanf("%d", &q);
    while(q--){
        scanf("%d%d%d", &a, &b, &p);
        int res = 1;
        while(b){
            if(b&1) res = 1ll*res*a % p;
            a = 1ll*a*a % p ;
            b >>= 1;
        }
        printf("%d\n", res);
    }
    return 0;
}

C++ 解法, 执行用时: 77ms, 内存消耗: 1108KB, 提交时间: 2022-05-24

#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
    int q;
    ll a,b,p;
    scanf("%d",&q);
    for(int i=0;i<q;i++)
    {
        ll m=1;
        scanf("%lld%lld%lld",&a,&b,&p);
        for(ll i=0;i<b;b=b/2)
        {
           if(b%2!=0) m=m*a%p;
            a=a*a%p;
        }
        printf("%lld\n",m);
    }
    return 0;
}

C++ 解法, 执行用时: 77ms, 内存消耗: 1140KB, 提交时间: 2022-04-02

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int p;
ll ksm(ll x,ll y)
{
    ll result=1;
    while(y)
    {
        if(y%2==1)
        {
            result=result*x%p;
        }
        y>>=1;
        x=x*x%p;
    }
    return result;
}
int main()
{
    ll q,a,b;
    scanf("%lld",&q);
    for(int i=0;i<q;i++)
    {
        scanf("%lld%lld%lld",&a,&b,&p);
        printf("%lld\n",ksm(a,b));
    }
    return 0;
}

C++ 解法, 执行用时: 77ms, 内存消耗: 1144KB, 提交时间: 2022-06-19

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fun(ll x, ll y, ll z)
{
    ll ans=1;
    x=x%z;
    while(y)
    {
        if(y&1)
        {
            ans=ans*x%z;
        }
        y>>=1;
        x=x*x%z;
    }
    return ans;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        ll x,y,z;
        scanf("%lld%lld%lld",&x,&y,&z);
        printf("%lld\n",fun(x,y,z));
    }
    return 0;
}

上一题