问题标题: 酷町堂:3343 快速幂(20分)看过刷过,不要错过!!

0
0
已解决
鲁天一
鲁天一
初级光能
初级光能

20分代码呈上:

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<sstream>
using namespace std;
int wq=0,sum=1;
int ksm(long long n,long long m,int k,long long kk)
{
    if(k==m)
        return sum;
    sum=sum*n%kk;
    wq++;
    ksm(n,m,wq,kk);
}
int main()
{
    long long n,m;
    int k;
    cin>>n>>m>>k;
    cout<<n<<'^'<<m<<" mod "<<k<<'='<<ksm(n,m,1,k);
    return 0;
}

测评结果说:Memory Limit Exceeded:20分

跪求刷过的大佬找找问题啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!


0
已采纳
张曈
张曈
高级守护
高级守护

这题必须用快速幂来写,普通递归会超时,另外,这题不建议用全局变量

提示:

快速幂是指将  a^2n 分解成 (a*a)^n

                 将 a^2n+1分解成(a*a)^n*a

的过程

大体代码如下

 

long long f(long long x,long long n,long long k)
{
    if(n==0) return 1;
    if(n%2==0)return *******
    return *******
} 

注:a^2n是指2n个a相乘,a^2n+1 同理,指2n+1个a相乘,中间打星号的地方自己想

提示:每次做完任意运算都要%k,如a*a写成((a%k)*(a%k))%k

0
0
我要回答