7026: 取模问题 I —— 单个数字取模
[Creator : ]
Description
取模运算是求两个数相除的余数。
取模运算(“Modulo Operation”)和取余运算(“Remainder Operation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于计算机术语中。取余则更多是数学概念。
在 OI 比赛中,有些题目,我们取模的结果要求是正数。例如:
1. $8 \bmod 3 = 2$。
2. $-8 \bmod 3 = 1$。
但是负数取模直接使用 C++ 的 $\%$ 运算,我们将得到一个负数。
因此我们在 OI 比赛中,要求数据 $x$ 对 $b$ 进行取模,我们的正确使用方法如下
取模运算(“Modulo Operation”)和取余运算(“Remainder Operation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于计算机术语中。取余则更多是数学概念。
对于整型数 $a,b$ 来说,取模运算或者求余运算的方法都是:
1. 求整数商: $c = \lfloor a/b \rfloor$。
2. 计算模或者余数: $r = a - c \times b$。 在 OI 比赛中,有些题目,我们取模的结果要求是正数。例如:
1. $8 \bmod 3 = 2$。
2. $-8 \bmod 3 = 1$。
但是负数取模直接使用 C++ 的 $\%$ 运算,我们将得到一个负数。
因此我们在 OI 比赛中,要求数据 $x$ 对 $b$ 进行取模,我们的正确使用方法如下
long long r=((x%b)+(b>0?b:-b))%b;这样做是确保余数 $r$ 为正数。
Input
一行包括两个整数 $x\ (-10^{18} \leq x \leq 10^{18})$ 和 $b\ (5 \leq b < x)$。
Output
一行一个正整数,表示 $x \bmod b$ 的结果。
Sample 1 Input
8 3
Sample 1 Output
2
Sample 2 Input
-8 3
Sample 2 Output
1
-8 = 3*(-3)+1
Sample 3 Input
7 -3
Sample 3 Output
1
7 = -3*(-2)+1