我的代码是参考题解里面的代码做出来的,但是我自己写的时候发现这个地方(看代码注释处)反过来判断就超时,正过来则没事,这是为啥?
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
int a[5001], b[5001];
ll sum;
int qgcd(int x, int y)
{
int xz = __builtin_ctz(x);
int yz = __builtin_ctz(y);
int z = min(xz, yz);
x >>= xz;
int zz;
while (y)
{
y >>= yz;
zz = x - y;
yz = __builtin_ctz(zz);
if (x > y)x = y;
if (zz < 0)y = -zz;//这里的判断不要反过来
else y = zz;
}
return x << z;
}
int main()
{
int n;cin >> n;
for (int i = 1;i <= n;i++)
cin >> a[i];
for (int i = 1;i <= n;i++)
cin >> b[i];
for (int i = 1;i <= n;i++)
{
sum = 0;
ll num = i;
for (int j = 1;j <= n;j++)
{
sum += num*qgcd(a[i], b[j]);
num = num * i % mod;
}
cout << sum%mod << endl;
}
}