Binary GCD 求卡常.
查看原帖
Binary GCD 求卡常.
1001542
K_func楼主2024/12/21 16:31
#include <bits/stdc++.h>
#pragma optimize O3
#define int long long
#define mod 998244353ll
using namespace std;
int n;
int gcd(int a, int b) {
    int az = __builtin_ctz(a);
    int bz = __builtin_ctz(b);
    int z = min(az, bz);
    b >>= bz;
    while (a) {
        a >>= az;
        int diff = a - b;
        az = __builtin_ctz(diff);
        b = min(a, b), a = abs(diff);
    }
    return b << z;
}
signed main(){
	cin>>n;
	vector a(n+1,0);
	vector b(n+1,0);
	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++){
		long long ans=0,num=i;
		for(int j=1;j<=n;j++){
			ans+=num*gcd(a[i],b[j]);
			ans%=mod;
			num=num*i%mod;
		}
		cout<<ans%mod<<endl;
	}
	
	return 0;
}

提交记录

2024/12/21 16:31
加载中...