您的位置:首页 > 新闻 > 会展 > 资源下载网站源码_seo服务外包报价_网站排名软件推荐_百度推广的费用

资源下载网站源码_seo服务外包报价_网站排名软件推荐_百度推广的费用

2025/3/4 21:50:23 来源:https://blog.csdn.net/bingw0114/article/details/144068675  浏览:    关键词:资源下载网站源码_seo服务外包报价_网站排名软件推荐_百度推广的费用
资源下载网站源码_seo服务外包报价_网站排名软件推荐_百度推广的费用

描述

对于给定的三个正整数 a,b,p ,计算 a的b次方modp 。

输入描述:

每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≦T≦5×10^5) 代表数据组数,每组测试数据描述如下:

一行上输入三个整数 a,b,p(0≦a,b≦10^9; 0<a+b; 1≦p≦10^9) 代表底数、指数和模数。

输出描述:

对于每一组测试数据,在一行上输出一个整数,代表式子的答案。

示例1

输入:

4
1 0 1
0 1 10
2 3 10
3 3 12

输出:

0
0
8
3
一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.给出T组数据

2.每组数据包含a,b,p三个正整数

3.求a的b次方mod p(对p求模)的值

二、解题思路

1.快速幂算法:原理:基于二进制位运算和乘法结合律,

将指数b转换为二进制形式,根据二进制位上的值来决定是否将当前的结果ans乘以底数a的相应次幂(通过不断对a进行平方操作来快速得到不同次幂的值),同时每一步都对p取模,这样可以避免中间结果过大导致整数溢出,并且高效的计算出最终结果。

2.具体步骤:首先初始化ans为1,用来存储最终结果

进入while循环,循环条件是b不为0,只要b还有值,说明还需要继续进行计算

在循环内部:通过if(b&1)判断b的二进制表示的最低位是否为1,如果为1

ans = ans * a % p;

然后执行a = a * a % p;这一步是将底数a进行平方操作,对p取模就得到了a的最高次幂,为下一次循环做准备

最后执行b>>=1,将b的二进制位表示右移一位,相当于去掉已经处理过的最低位,继续处理下一位

如此反复,直到b值为0,此时ans中存储的就是a的b次方对p取模的最终结果。

三、具体步骤

使用的语言是C

#include <stdio.h>// 快速幂算法,计算a的b次方对p取模的结果
int quick_pow(int a, int b, int p) {int ans = 1;while (b) {if (b & 1) {ans = (long long)ans * a % p;}a = (long long)a * a % p;b >>= 1;}return ans;
}int main() {int T;scanf("%d", &T);while (T--) {int a, b, p;scanf("%d%d%d", &a, &b, &p);if(b == 0 && p == 1) {printf("0\n");} else {int result = quick_pow(a, b, p);printf("%d\n", result);}}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com