当前位置:首页 > 题解目录 > 正文内容

【题解】取余运算

亿万年的星光5年前 (2021-04-23)题解目录1931

【题目描述】

输入b,p,k的值,求bp mod k的值。其中b,p,k×k为长整型数。

【输入描述】

输入b,p,k的值。

【输出描述】

求 b^p mod k的值。

【样例输入】

2 10 9

【样例输出】

2^10 mod 9=7


【题目分析】

  • 从题目给的样例看数据量不大,可以用循环的方式直接求解。

  • 如果题目中的b比较大,那么使用快速幂的求法

  • 用到数论里的(a*b)%7 =(a%7 * b%7)%7




【参考代码1】——不使用任何代码优化

#include<iostream>
using namespace std;
long long a,b,p;
long long ans=1;
int main()
{
	cin>>a>>b>>p;
	long long tmp=b; //把b先拿出来 
	while(b!=0)
	{
		ans=ans*a; //累乘的过程 
		b--;
	}
	//cout<<ans<<endl; 
	ans=ans%p;
	cout<<a<<"^"<<tmp<<"mod"<<p<<"="<<ans;
	return 0;
}


【参考代码2】——使用公式优化

#include<iostream>
using namespace std;
long long a,b,p;
long long ans=1;
int main()
{
	cin>>a>>b>>p;
	long long tmp=b; //把b先拿出来 
	while(b!=0)
	{
		ans=(ans*a)%p; //优化 
		b--;
	
	}
	//cout<<ans<<endl; 
	ans=ans%p;
	cout<<a<<"^"<<tmp<<"mod"<<p<<"="<<ans;
	return 0;
}

【参考代码3】——快速幂优化

#include<iostream>
using namespace std;
long long a,b,p;
long long ans=1;
int main()
{
	cin>>a>>b>>p;//定义底数,次数,取余 
	long long tmp=b; //把b先拿出来 
	while(b!=0)
	{
		if(b%2==1)
			ans=(ans*a)%p;
		a=(a*a)%p;
		b=b/2;
	}
	//cout<<ans<<endl; 
	ans=ans%p;
	cout<<a<<"^"<<tmp<<"mod"<<p<<"="<<ans;
	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】奇偶校验

【题目描述】奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数 是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。现在给...

【题解】区间数位个数

区间数位个数(digit.cpp)【描述】给定整数n和整数k,求出1~n中所有数的每一位数字中,出现数字k的次数。【输入】第一行是两个个整数n和k【输出】一个整数表示答案。【样例输入输出】light....

【题解】相关数

【题目描述】一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。【输入描述】每组数据前有一个N(<10...

【题解】求车速问题

【题目描述】一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多...

【题解】车厢调度

【题解】车厢调度

【题目描述】有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合。假设从A方向驶来的火车有n节(n<=1000)。分别按照顺序编号为1,2,3,...n。假定在...

【题解】黑色联通块

【题解】黑色联通块

【题目描述】输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计其中黑色连通块的个数。如果两个黑格子有公共边或者公共顶点,就说它们属于同一个联通块。如下图所示的图形有3个联通块。【输入描述】...