首页 > 其他分享 >除法取模运算(公式法)

除法取模运算(公式法)

时间:2023-06-25 16:47:37浏览次数:29  
标签:取模 frac 运算 10 cdot i64 除法

除法取模运算(公式法)

注意,除法是指算术除法后向下取整,即计算机中的整数除法
如果遇到(a/b)%m的问题,直接运算a/b然后取模是错误的,这时,我们往往需要求出b的逆元,然后将式子改为:(a*b的逆元)%m的形式,此时先做乘法再取模就正确了。

除此之外,还有一种方法,就是用以下公式求解:

x/d%m=x%(d*m)/d

证明:

\[\begin{aligned} \frac{x}{d} \%m &= \frac{x}{d}-m\cdot \frac{x}{d\cdot m}\\ \frac{x\%(d\cdot m)}{d}&=\frac{x-d\cdot m\cdot \frac{x}{d\cdot m}}{d}\\ &=\frac{x}{d}-m\cdot \frac{x}{d\cdot m} \end{aligned} \]

例题

[原题链接](Problem - I - Codeforces)

题目大意

给两个整数n,m。求\(\frac{1}{n}\) 小数点后第m位。\(1\leq n \leq 10^5,1\leq m \leq 10^9\)

样例1

输入

3 5

输出

3

样例2

输入

233 23

输出

5

思路

设\(k=\frac{1}{n}\),则求k小数点后第1位,就是把k乘以10然后取个位,求k小数点后第2位,就是k乘以100然后取个位,以此类推

故求k小数点后第m位就是\(\frac{10^m}{n} \% 10\),然后用公式转化为:\(\frac{10^m \%(10\cdot n)}{n}\)。然后就可以使用快速幂计算。

AC代码

#include<bits/stdc++.h>
using namespace std;
using i64 = long long;

i64 n, m;

i64 qp(i64 a, i64 b) {
	i64 res = 1;
	while (b) {
		if (b & 1) {
			res = res * a % (10 * n);
			b--;
		}
		a = a * a % (10 * n);
		b /= 2;
	}
	return res;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> n >> m;
	cout << qp(10, m) / n;
	
	return 0;
}

标签:取模,frac,运算,10,cdot,i64,除法
From: https://www.cnblogs.com/NonName/p/17503264.html

相关文章

  • python入门(四):运算符和表达式
    Python运算符和表达式指南原文|大纲|首页在Python中,运算符用于执行各种操作,如算术运算、比较运算、逻辑运算等。表达式是由变量、常量和运算符组成的代码片段。了解Python的运算符和表达式对于编写有效的代码至关重要。算术运算符算术运算符用于执行基本的算术操作,如加......
  • VBA中运算符
    VBA中的运算符可以分为以下6类:赋值运算符算数运算符比较运算符逻辑运算符连接运算符其他运算符......
  • JS(运算符、流程控制)
    一运算符(操作符)1运算符的分类运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。JavaScript中常用的运算符有:算数运算符递增和递减运算符比较运算符逻辑运算符赋值运算符2算数运算符算术运算符概述概念:算术运算使用的符号,用于执......
  • 矩阵运算
    importnumpyasnpimportmatplotlib.pyplotasplt#定义矩阵A=np.array([[1,2],[3,4]])B=np.array([[5,6],[7,8]])#矩阵的四则运算addition=A+Bsubtraction=A-Bmultiplication=A*Bdivision=A/B#带变元的矩阵计算x=9scalar_multiplication=A*......
  • 举证运算c++
    #include<iostream>#include<vector>#include<cmath>usingnamespacestd;classMatrix{private:introws;intcols;vector<vector<double>>data;public:Matrix(introwCount,intcolCount):rows(rowCount),cols(colC......
  • Java学习-运算符
    运算符有好多,意思也都很好理解,所以不打算再写一遍了,要知道的一点是运算符一般输出的都是布尔类型的值,所以用于判断的时候多一点。下面来写写三元运算符吧:用法格式就是这样子,可以用来两个数的比较,如果前面的括号里的条件成立,就执行后面第一个语句,如果条件不成立,就执行后买你第二......
  • golang的位运算
    二进制字节位的几个操作例子:0110&1011=0010//与AND都为10110|1011=1111//或OR至少一个为10110^1011=1101//异或XOR只能一个为10110&^1011=0100//位清除ANDNOT清除标志位,不都为1a&^b的意思就是清零a中,ab都为1......
  • C++ 中的运算符重载
     您可以重定义或重载大部分C++内置的运算符。这样,您就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字operator和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。https://www.lekaowang.com/jszgz/z......
  • 可重载运算符/不可重载运算符
     下面是可重载的运算符列表:双目算术运算符+(加),-(减),*(乘),/(除),% (取模)关系运算符==(等于),!=(不等于),<(小于),>(大于),<=(小于等于),>=(大于等于)逻辑运算符||(逻辑或),&&(逻辑与),!(逻辑非)单目运算符+(正),-(负),*(指针),&(取地址)自增自减运算符++(自增)......
  • Java的7种位运算符
    位运算符在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)操作符语义描述运算规则&  按位与    二进制数据按位与操作如果两个二进制位上的数都是1,那么运算结果为1,其他情况运算结果......