分治算法(Divide and Conquer Algorithms)

所谓分治算法,就是把问题分而治之的意思,将一个较大的问题分解成几个较小的问题,然后通过对较小的问题进行求解,达到对整个问题的求解。我们在搜索中用到的二分法,排序中有到的快速排序和归并排序,都是分治算法的应用。

例题:取余运算(mod)
输入x,p,k的值,求xp mod k的值。其中x,p,k都长整型数
例如:
输入:3 5 7 输出:5

提示1:若p为偶数, 若p为奇数,
提示2:(a*b)%p=(a%p*b%p)%p

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;

int x,p,m,i,result;
int main(){
    cin>>x>>p>>m;
    result=1;
    while (p>0)
    {
        if (p%2==1)
           result=result*x%m;
           p/=2;
           x=x*x%m;
    }
    cout<<result<<endl;
    return 0;    
}