您现在的位置是:主页 > news > 移动商城型网站开发/企业建站

移动商城型网站开发/企业建站

admin2025/6/15 12:10:57news

简介移动商城型网站开发,企业建站,电影网站html模板,网站服务器备案查询网站备案P1226 取余运算||快速幂 题目描述 输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod ks” s为运算结果 输入输出样例 …

移动商城型网站开发,企业建站,电影网站html模板,网站服务器备案查询网站备案P1226 取余运算||快速幂 题目描述 输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod ks” s为运算结果 输入输出样例 …

 P1226 取余运算||快速幂

题目描述

输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。

输入输出格式

输入格式:

 

三个整数b,p,k.

 

输出格式:

 

输出“b^p mod k=s”

s为运算结果

 

输入输出样例

输入样例#1:
2 10 9
输出样例#1:
2^10 mod 9=7

 

  这是一道很有趣的水题,如果知道公式。

  一般求解会溢出,导致答案错误。

  这里介绍取模的一个公式: a*b%k=(a%k)*(b%k)%k.

  在我们这道题中是b^p = (b^(p/2)%k) * (b^(p/2) %k)%k

  可以看出来运用的是分治的思维。那么一只分解到p == 1时就能够返回了。

  蛤?你说p等于奇数时候? 那就把那个奇数再挑出来呗。 b^p = b * b^(p/2) * b^(p/2)

 

 1 #include <cstdio>
 2 
 3 long long b, k;
 4 
 5 long long fff(long long p)
 6 {
 7     if(p == 1)    //p等于1时 b^p%k = b%k;
 8         return b%k;
 9     long long temp = fff(p/2); //分~
10     temp = (temp*temp)%k;    //注意上面p==1时已经%k,所以这里不需要在括号里面%k
11     if(p&1)    //如果p等于奇数
12         temp = (temp*b)%k;
13     return temp;
14 }
15 
16 int main()
17 {
18     long long p;
19     scanf("%lld%lld%lld", &b, &p, &k);
20     long long ans = fff(p);
21     printf("%lld^%lld mod %lld=%lld", b, p, k, ans);
22     
23     return 0;
24 }

 

转载于:https://www.cnblogs.com/yBaka/p/7388017.html