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

【题解】取余运算

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

【题目描述】

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


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

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

    分享给朋友:

    相关文章

    【题解】移动路线

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

    【题解】基因锁

    【题目描述】小X终于意识到需要花大力气减重了,他询问了若干个减重专家后决定采用最适合年轻人的运动减重方案,考虑再三,小X最终选择了打羽毛球的方式,一个原因是小X的小伙伴大都喜欢打羽毛球,其次是打羽毛球...

    【题解】01背包

    【题目描述】一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。【输入描述】第一...

    【题解目录】友好城市

    【题解目录】友好城市

    【题目描述】Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河...

    求Π的值

    【题目描述】根据公式:arctanx(x)=x−x^3/3+x^5/5−x^7/7+…和π=6arctanx(1/√3).定义函数arctanx(x),求当最后一项小于10^(−6)时π的值。【输入描...

    【题解】自动晾衣机

    【题目描述】有一个环形可以晾衣服的衣架,有若干个夹子组成,它可以晾不同长度的衣服(占用多个夹子),并且每两件衣服中间要有一个空夹子作为空位,下面需要依次晾干几件长度不一的衣服,请你给出某个夹子的使用情...