#pragma once
// sum_{0 <= i < N} (ai + b) // mtemplate<typenameT>Tsum_of_floor(Tn,Tm,Ta,Tb){Tret=0;if(a>=m)ret+=(n-1)*n*(a/m)/2,a%=m;if(b>=m)ret+=n*(b/m),b%=m;Ty=(a*n+b)/m;if(y==0)returnret;Tx=y*m-b;ret+=(n-(x+a-1)/a)*y;ret+=sum_of_floor(y,a,m,(a-x%a)%a);returnret;}// verify www.codechef.com/viewsolution/36222026// count x : ax + b mod m < yr, 0 <= x < xrtemplate<typenameT>Tmod_affine_range_counting(Ta,Tb,Tm,Txr,Tyr){assert(0<=yr&&yr<=m);returnsum_of_floor(xr,m,a,b+m)-sum_of_floor(xr,m,a,b+m-yr);}
#line 2 "math/floor-sum.hpp"
// sum_{0 <= i < N} (ai + b) // mtemplate<typenameT>Tsum_of_floor(Tn,Tm,Ta,Tb){Tret=0;if(a>=m)ret+=(n-1)*n*(a/m)/2,a%=m;if(b>=m)ret+=n*(b/m),b%=m;Ty=(a*n+b)/m;if(y==0)returnret;Tx=y*m-b;ret+=(n-(x+a-1)/a)*y;ret+=sum_of_floor(y,a,m,(a-x%a)%a);returnret;}// verify www.codechef.com/viewsolution/36222026// count x : ax + b mod m < yr, 0 <= x < xrtemplate<typenameT>Tmod_affine_range_counting(Ta,Tb,Tm,Txr,Tyr){assert(0<=yr&&yr<=m);returnsum_of_floor(xr,m,a,b+m)-sum_of_floor(xr,m,a,b+m-yr);}