萌新刚学 OI,求助 90pts/kel
  • 板块P4861 按钮
  • 楼主SIXIANG32
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/8/19 14:13
  • 上次更新2023/11/4 10:04:18
查看原帖
萌新刚学 OI,求助 90pts/kel
298549
SIXIANG32楼主2021/8/19 14:13
#include <iostream>
#include <cmath>
#include <map>
#define int long long
#define MAXN 100000
#define Mod 19260817
#define QWQ cout << "QWQ" << endl;
using namespace std;
map <int, int> M;
int gcd(int n, int m) {
	if(!m) return n;
	else return gcd(m, n % m);
} 
int mul(int n, int m, int M) {
	int ans = 0;
	while(m) {
		if(m & 1) ans = (ans + n) % M;
		n = (n + n) % M, m >>= 1;
	}
	return ans;
}
int qpow(int n, int m, int M) {
	int ans = 1;
	while(m) {
		if(m & 1) ans = mul(ans, n, M);
		n = mul(n, n, M), m >>= 1;
	}
	return ans;
}
void BSGS(int a, int b, int m) {
	M.clear();
	int t = ceil(sqrt(m) + 1), qwq = b % m, qaq = 1, quq = 1;
	M[qwq] = 0;
	for(int p = 1; p <= t; p++) {
		qwq = qwq * a % m;
		M[qwq] = p;
	}
	qaq = qpow(a, t, m);
	for(int p = 1; p <= t; p++) {
		quq = quq * qaq % m;
		if(M[quq] && ((p * t - M[quq]) % m + m) % m) {
			cout << ((p * t - M[quq]) % m + m) % m << endl;
			return ;
		}
	}
}
signed main() {
	int m, k; cin >> m >> k;
	if(gcd(m, k) != 1)cout << "Let's go Blue Jays!" << endl;
	else BSGS(k, 1, m);
} 

第一个点 WA 了,有人帮忙看看嘛/kel/kel/kel

2021/8/19 14:13
加载中...