【分治】快速模幂

<center>

问题 R: 【分治】快速模幂

时间限制: 1 Sec  内存限制: 64 MB
提交: 8  解决: 7
[提交][状态][讨论版]
</center>

题目描述

试求a b%n的值,其中a、b、n均为整数范围内的数。

输入

三个整数a、b和n

输出

a b%n的值

样例输入

1 1 1

样例输出

0
解题思路:快速模幂比快速幂多了取余,和另一个快速取余是一样的。有公式。
代码:
#include <iostream>
#include <cstdio>

using namespace std;

//a*b % n = (a % n)*(b % n) % n
long long int mo(long long int x,long long int n,long long int a){
    if(x==a){
        return 0;
    }
    if(n==1){
        return x%a;
    }
    if(n==2){
        return x*x%a;
    }
    if(n==3){
        return x*x*x%a;
    }
    if(n==4){
        return x*x*x*x%a;
    }
    if(n%2==0){
        return mo(x,n/2,a)*mo(x,n/2,a)%a;
    }
    if(n%2!=0){
        return mo(x,(n-1)/2,a)*mo(x,(n-1)/2,a)*x%a;
    }
}

int main()
{
    int x;
    int n;
    int a;
    long long int jieguo;
    while(scanf("%d %d %d",&x,&n,&a)!=EOF){
        jieguo=mo(x,n,a);
        printf("%lld\n",jieguo);
    }
    return 0;
}

 

 
全部评论

相关推荐

M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务