#include<bits/stdc++.h> using namespace std; #define in inline #define rep(i,a,b) for(int i=a;i<=b;i++) #define repd(i,a,b) for(int i=a;i>=b;i--) #define For(i,a,b) for(int i=a;i<b;i++) #define _(d) while(d(isdigit(ch=getchar()))) template < class T>in void g(T&t){T x,f=1; char ch;_(!)ch== '-' ?f=-1:f;x=ch-48;_()x=x*10+ch-48;t=f*x;} typedef long long ll; const int N=2e5+4,L=2e5; int mu[N],flag[N],p[N],tot;vector< int >fac[N]; in void pre(){ mu[1]=1; rep(i,2,L){ if (!flag[i]) flag[i]=1,mu[i]=-1,p[++tot]=i; rep(j,1,tot){ if (i*p[j]>L) break ; flag[i*p[j]]=1; if (i%p[j]==0){mu[i*p[j]]=0; break ;} else mu[i*p[j]]=-mu[i]; } }rep(i,1,L) for ( int j=i;j<=L;j+=i) fac[j].push_back(i); } int l,Q;ll t[N]; in void ins( int x, int v){ for (;x<=l;x+=x&-x) t[x]+=v; } in ll sum( int x){ ll res=0; for (;x;x-=x&-x) res+=t[x]; return res; } in void que( int x){ ll ans=0; for ( int i=1,nxt;i<=x;i=nxt+1){ nxt=x/(x/i); ans+=(ll)(x/i)*(sum(nxt)-sum(i-1)); } printf ( "%lld\n" ,ans); } in void add( int n, int d, int v){ n=n/d; For(i,0,fac[n].size()){ int q=fac[n][i]; ins(q*d,v*mu[q]); } } int main(){ //freopen(".in","r",stdin),freopen(".out","w",stdout); int T=0;pre(); while (1){ g(l),g(Q); if (!l&&!Q) break ; printf ( "Case #%d:\n" ,++T); memset (t,0, sizeof (t)); while (Q--){ int op;g(op); if (op==2){ int x;g(x); que(x); } if (op==1){ int n,d,v;g(n),g(d),g(v); if (n%d!=0) continue ; add(n,d,v); } } } return 0; }
|