2020.1.9 【牛】华华教月月做数学 快速幂+快速乘 模的性质

时隔两月,我回来了

学硬件要吐了

终于熬出头了

今天来玩一下牛客的ak赛

第一t我就不会了

似乎要用什么欧拉?
在这里插入图片描述
在这里插入图片描述
那么我就没办法了
查!

然而出乎我的意料

只需要快速乘和快速幂就可以a

我擦

先贴一发代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll quick_mul(ll a, ll b, ll p) //快速乘 计算 (a*b)%p
{
	ll res = 0; //加法初始化
	while (b > 0)
	{
		if (b & 1)res = (res + a) % p;
		a = (a << 1) % p;
		b >>= 1;
	}
	return res;
}
ll quick_pow(ll a, ll b, ll p) //快速幂 计算 (a^b %p)
{
	ll res = 1;
	while (b > 0)
	{
		if (b & 1)res = quick_mul(res, a, p);
		b >>= 1;
		a = quick_mul(a, a, p);
	}
	return res;
}
int main()
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		ll a, b, c; //求 a^b mod p 的值
		scanf("%lld%lld%lld", &a, &b, &c);
		printf("%lld\n", quick_pow(a, b, c));
	}
	return 0;
}

/*
 * ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
 * │Esc│   │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│  ┌┐    ┌┐    ┌┐
 * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘  └┘    └┘    └┘
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
 * │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │Num│ / │ * │ - │
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │   │
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
 * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter  │               │ 4 │ 5 │ 6 │   │
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐     ├───┼───┼───┼───┤
 * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│  Shift   │     │ ↑ │     │ 1 │ 2 │ 3 │   │
 * ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
 * │ Ctrl│ Win│ Alt│         Space         │ Alt│ Win│Menu│Ctrl│ │ ← │ ↓ │ → │ │   0   │ . │←─┘│
 * └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
 *
 */

出自海星***的博客
让我回忆一下

快速乘

ll quick_mul(ll a, ll b, ll p) //快速乘 计算 (a*b)%p
{
	ll res = 0; //加法初始化
	while (b > 0)
	{
		if (b & 1)res = (res + a) % p;
		a = (a << 1) % p;
		b >>= 1;
	}
	return res;
}

快速幂

ll quick_pow(ll a, ll b, ll p) //快速幂 计算 (a^b %p)
{
	ll res = 1;
	while (b > 0)
	{
		if (b & 1)res = quick_mul(res, a, p);
		b >>= 1;
		a = quick_mul(a, a, p);
	}
	return res;
}

这样套上快速乘就不会炸了

关于模的性质
模的性质
这个博客可以看看

发布了61 篇原创文章 · 获赞 8 · 访问量 2452

猜你喜欢

转载自blog.csdn.net/weixin_43982216/article/details/103913648