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

【题解】取余运算

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

【题目描述】

输入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;
}


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

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

分享给朋友:

相关文章

【题解】开花

【题解】开花

【题目描述】小A所在的学校又迎来了一年一度的开花活动,有 n 名学生被评为文学优秀奖,m 名学生被评为体育优秀奖。现已知两个奖项获奖同学的编号,每个同学都有唯一的编号。只有同时被评为文学优秀奖和体育优...

【题解】电缆线(2019青岛市程序设计竞赛)

【问题描述】在郊区有N座通信基站,P条双向电缆,第 i 条电缆连接基站 A_i 和 B_i。特别地,1号基站是通信公司的总站,N号基站位于一座农场中。现在,农场主希望对通信线路进行升级,其中升级第 i...

【题解】均分蛋糕

【题目描述】小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个...

【题解】修改回文

【题目描述】如果一个字符串,顺读与倒读的内容一样,称这个字符串为回文。例如 aka 是一个回文,noon 也是一个回文。给定一个字符串,请计算最少需要修改多少个字符,才能...

【题解】校运会

【题解】校运会

【题目描述】校运会上,一共有N个参赛选手,已知N个选手的名字。然后老师告诉你M句话,话的内容是学生A与学生B在同一组里。如果学生A与学生B在同一组里,学生B与学生C也在同一组里,就说明学生A与学生C在...

【题解】移动路线

【题目描述】X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一...