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

【题解】取余运算

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

【题目描述】

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


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

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

分享给朋友:

相关文章

【题解】取余(2019青岛市程序设计竞赛)

【问题描述】给你n个正整数a1,a2,..,an。求(a1*a2*..an)%10007的值。【输入】第一行,n,表示整数的个数。第二行,n个用空格隔开的正整数。【输出】一个整数,(a1*a2*..a...

【题解】2001-T1 数的计数

【题目描述】我们要求找出具有下列性质数的个数(包含输入的自然数nn):先输入一个自然数n(n≤1000)n(n≤1000),然后对此自然数按照如下方法进行处理:1.不作任何处理;2.在它的左边加上一个...

【题解】真分数(2019青岛市程序设计竞赛)

【描述】真分数,指的是分子比分母小的分数,真分数的分数值小于1。给出n个正整数,任取两个数分别作为分子和分母组成真分数。求能组成多少不同值的真分数。【输入】第一行是一个正整数n。第二行是n个不同的正整...

【题解】最多次数

【题目描述】小蓝有一个字符串 s,他特别喜欢由以下三个字符组成的单词:l,q,b,任意顺序都可以,一共有 6 种可能:lqb、lbq、qlb、qbl、blq、bql。现在...

分数求和

题目描述】输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。如: 5/6  、 10/3  均是最简形...

合影效果

【题目描述】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他...