C++模运算

题目描述
定义“取模”运算:对于正整数 a 和 p,a % p 表示 a 除以 p 的余数,又称“模”运算。现在,输入三个正整数 b、p、k,请编程计算 b^p % k 的值。

输入格式
一行三个正整数,分别表示 b、p、k 的值。

输出格式
一行一个整数,表示 b^p % k 的值。

样例数据
input
2 10 9
output
7
数据规模与约定
b、p、k×k≤2147483647

时间限制:1s1s
空间限制:256MB

#include <bits/stdc++.h>
using namespace std;
int pow_mod (int b, int p, int k) 
{
    if(p==0) return 1%k;  
    if(p==1) return b%k; 
    int y=pow_mod(b, p/2, k); 
    if(p%2==0) return (y*y)%k;
    else return (((y*y)%k)*b)%k;  
}                       
int main()
{
    int b,p,k;
    cin>>b>>p>>k;
    b=b%k;
    cout<<pow_mod(b, p, k);
}

### C++模运算的使用方法 在 C++ 编程语言中,模运算是通过百分号 `%` 来实现的。该运算符用于求两个数值相除后的余数。 #### 基本语法 对于整型变量 `a` 和 `b` (其中 `b != 0`) ,表达式 `a % b` 返回的是 `a / b` 的余数[^3]。 ```cpp #include <iostream> using namespace std; int main() { int dividend = 17; int divisor = 5; cout << "The remainder of " << dividend << " divided by " << divisor << " is "; cout << (dividend % divisor) << endl; // 输出 The remainder of 17 divided by 5 is 2 return 0; } ``` 当涉及到负数时,C++ 标准规定了如果至少有一个操作数是非负的话,那么结果的符号与被除数相同;而当两者都是负的时候,行为取决于具体编译器实现。 #### 应用场景之一:判断奇偶性 可以利用模运算来快速检测一个整数是否为偶数或者奇数: ```cpp if (number % 2 == 0){ // number 是偶数 } else { // number 是奇数 } ``` #### 大规模幂次下的应用——模幂运算 针对大数范围内的高效计算需求,存在一种称为“模幂”的技术,它可以在不溢出的情况下完成高精度的结果获取。其核心在于将指数分解成二进制形式,并按照每一位执行相应的平方和乘法操作的同时不断取模,从而保持中间值始终处于合理范围内。 ```cpp long long mod_pow(long long base, long long exp, long long modulus) { long long result = 1; while (exp > 0) { if (exp & 1) { // 当前位是1 result = (result * base) % modulus; } base = (base * base) % modulus; exp >>= 1; // 右移一位相当于除以2 } return result; } // 调用例子 cout << mod_pow(3, 13, 7); // 输出应该是 1 ``` 上述代码实现了高效的模幂函数 `mod_pow()`,能够安全地处理非常大的指数情况而不必担心数据类型的上限问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值