专栏文章

月夜飒飒动干戈 --- DYOI系列题解

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miof8xkr
此快照首次捕获于
2025/12/02 18:14
3 个月前
此快照最后确认于
2025/12/02 18:14
3 个月前
查看原文
简略题意:求出所有的 ii 使 ki=zpip+9k^i=z,p\le i \le p + 9
由于 ii 的范围极小,只需要枚举 1010 个数字,所以暴力检查每一个 ii 是否符合要求;计算部分使用带模的快速幂并只取出个位数即可。
快速幂如下:
CPP
inline ll qpow(ll a, ll b, ll mod) {
	ll ret = 1;
	while(b > 0) {
		if(b & 1) {
			ret *= a, ret %= mod;
		}
		a *= a, a %= mod;
		b >>= 1;
	}
	return ret;
}
枚举部分如下
CPP
for(ll i = p; i <= p + 9; ++i) {
    if(qpow(k, i, 10) == x) {
        ans[tot++] = i;
    }
}
最后的统计与存储过于简单不放代码了。
总代码:
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
ll ans[13];

inline ll qpow(ll a, ll b, ll mod) {
	ll ret = 1;
	while(b > 0) {
		if(b & 1) {
			ret *= a, ret %= mod;
		}
		a *= a, a %= mod;
		b >>= 1;
	}
	return ret;
}

int main() {
	ll T;
	cin >> T;
	while(T--) {
		ll k, p, x;
		cin >> k >> p >> x;
		ll tot = 0;
		k %= 10;
		for(ll i = p; i <= p + 9; ++i) {
			if(qpow(k, i, 10) == x) {
				ans[tot++] = i;
			}
		}
		if(tot == 0) {
			cout << "No Ans" << endl;
		} else {
			cout << tot << endl;
			for(ll i = 0; i < tot; ++i) {
				cout << ans[i] << ' ';
			}
			cout << endl;
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...