求a*b%n
a*b会爆ull
typedef unsigned long long ull;
ull mul(ull a,ull b,ull n){
ull q=(long double)a*b/n;//long double a*b会记录下a*b的前几位,后面几位有误差,但除n只关心前几位,最后转为ull相当于向下取整
return (a*b-q*n+n)%n;//a*b相当于a*b%ull
//a*b-q*n可能会是负数所以+n
}