社区讨论
gcd(ka,kb)=gcd(a,b)
P2152[SDOI2009] SuperGCD参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lxjusgky
- 此快照首次捕获于
- 2024/06/18 11:37 2 年前
- 此快照最后确认于
- 2024/06/18 11:47 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
int prime[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 0};
struct bigint {
int num[10001], len;
bigint() {
memset(num, 0, sizeof num);
len = 1;
}
bigint(string s) {
memset(num, 0, sizeof num);
int n = s.length();
len = 0;
for (int i = n - 1; i >= 0; i--)
num[++len] = s[i] - '0';
for (len = 10000; num[len] == 0 && len >= 2; --len);
}
};
bigint mul(bigint a, int b) {
bigint c("0");
for (int i = 1; i <= a.len; i++) {
c.num[i] += a.num[i] * b;
c.num[i + 1] += c.num[i] / 10;
c.num[i] %= 10;
}
for (c.len = 10000; c.num[c.len] == 0; c.len--);
return c;
}
pair<bigint, int> div(bigint a, int b) {
bigint c("0");
int r = 0;
for (int i = a.len; i >= 1; i--) {
r = r * 10 + a.num[i];
if (r >= b) {
c.num[i] = r / b;
r %= b;
}
}
for (c.len = 10000; c.num[c.len] == 0; c.len--);
return {c, r};
}
string a, b;
bigint A, B, C("1");
pair<bigint, int> u, v;
void update(int x) {
while ((u = div(A, x)).second == 0)
if ((v = div(B, x)).second == 0) {
A = u.first;
B = v.first;
C = mul(C, x);
} else A = u.first;
while ((v = div(B, x)).second == 0)
B = v.first;
}
int main() {
cin >> a >> b;
A = bigint(a);
B = bigint(b);
for (int i = 0; prime[i]; i++) {
if (A.num[1] == 1 && A.len == 1) break;
if (B.num[1] == 1 && B.len == 1) break;
update(prime[i]);
}
for (int i = 10; i <= 185; i++) {
if (A.num[1] == 1 && A.len == 1) break;
if (B.num[1] == 1 && B.len == 1) break;
update(i * 6 + 1);
if (A.num[1] == 1 && A.len == 1) break;
if (B.num[1] == 1 && B.len == 1) break;
update(i * 6 + 5);
}
for (int i = C.len; i >= 1; i--)
printf("%d", C.num[i]);
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...