黑科技乘法(转载大佬dh)

https://paste.ubuntu.com/p/TvcscVtsYf/

#include<bits/stdc++.h>
using namespace std;

const long long mo = 23333333333333333ll;

long long mul(long long x, long long y) {
	x %= mo, y %= mo; //如果x,y已经<mo可以不用这句话,否则必须要
	long long z = (long double)	x * y / mo + 0.5; //加0.5相当于四舍五入,精度更好
	z = x * y - z * mo; //利用了自然溢出,编译指令请不要加-ftrapv
	return (z % mo + mo) % mo;
}

int main() {
	printf("%lld
", mul(12345678901234567ll, 987654321098765432ll));
}
原文地址:https://www.cnblogs.com/nibabadeboke/p/14990759.html