编程实现乘方运算a^b mod N

一、实验目的:

编程实现乘方运算

二、实验过程:

1.首先理解性质:

如果a ≡b(mod n),c ≡d(mod n),那么ac ≡bd(mod n)。

2.运用二进制例如7=0111,11^7=(11^1)*(11^2)*(11^4),以及

两个公式解决乘方运算

3.实验首先定义长整型变量a,b,c,接着定义mod函数实现

运用while循环将b转化为二进制,如果b最后一位为1,长整型变量m为a % n,a = a * a % n进行取模运算,b向左移动一位,一致循环直到b移动到0,结束循环,此时m的值即为结果。最后输入a,b,c并调用mod函数。

三、实验代码及结果:

(1)实验代码:

#include<iostream>

using namespace std;

typedef long long LL;

LL a, b, n;//定义全局变量a, b, n

//定义mod函数实现 a^b mod n

void mod() {

       LL m=1;

       while(b) {//将b转化为二进制

              if (b % 2 == 1)//如果二进制b最后一位为1

              {

                     m = m * a % n;//取模运算

              }

              b>>=1;//b向左移动一位

              a = a * a % n;//取模运算

       }

       cout << m << endl;//输出m即为a^b mod n的值

}

int main() {

       cout << "计算 a^b  mod n,依次输入a,b,n(中间用空格隔开):";

       cin >> a >> b >> n;//输入a,b,c

       mod();//调用函数mod

}

(2)实验结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值