BZOJ-3529 数表
 
 
)&preview=true)
%3D%0A%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%0A%200%26%20%2C%20%26%20%5Csum_%7Bd%7Cn%7Dd%3Ea%5C%5C%20%0A%20%5Csum_%7Bd%7Cn%7Dd%20%26%20%2C%20%26%20%5Csum_%7Bd%7Cn%7Dd%20%5Cleq%20a%0A%5Cend%7Bmatrix%7D%5Cright.&preview=true)
 
 
)%3D%5Csum_%7BT%3D1%7D%5E%7Bn%7D%5Cleft%20%5Clfloor%20%5Cfrac%7Bn%7D%7BT%7D%20%20%5Cright%20%5Crfloor%20%5Ccdot%20%5Cleft%20%5Clfloor%20%5Cfrac%7Bm%7D%7BT%7D%20%20%5Cright%20%5Crfloor%20%5Csum_%7Bd%7CT%7Df(d)%5Ccdot%20%5Cmu(%5Cfrac%7BT%7D%7Bd%7D)&preview=true)
%3D%5Csum_%7Bd%7Cn%7Df(d)%5Ccdot%20%5Cmu(%5Cfrac%7Bn%7D%7Bd%7D)%2C%E8%80%83%E8%99%91%E7%A6%BB%E7%BA%BF%EF%BC%8C%E5%AF%B9a%E4%BB%8E%E5%B0%8F%E5%88%B0%E5%A4%A7%E6%8E%92%E5%BA%8F%2C%E5%AF%B9%E6%AF%8F%E6%AC%A1%E5%B0%8F%E4%BA%8E%E7%AD%89%E4%BA%8Ea%E7%9A%84f(d)%E5%80%BC%E5%8A%A0%E5%88%B0g(n)%E4%B8%AD%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84%E7%BB%B4%E6%8A%A4%E3%80%82&preview=true)
 
 
 #include<bits/stdc++.h>
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define itn int
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);
#define STR clock_t startTime = clock();
#define END clock_t endTime = clock();cout << double(endTime - startTime) / CLOCKS_PER_SEC *1000<< "ms" << endl;
using namespace std;
const int N=1e5+5;
const long long mod=1e9+7;
const long long mod2=998244353;
const int oo=0x7fffffff;
const int sup=0x80000000;
typedef long long ll;
typedef unsigned long long ull;
template <typename it>void db(it *begin,it *end){while(begin!=end)cout<<(*begin++)<<" ";puts("");}
template <typename it>
string to_str(it n){string s="";while(n)s+=n%10+'0',n/=10;reverse(s.begin(),s.end());return s;}
template <typename it>int o(it a){cout<<a<<endl;return 0;}
ll mul(ll a,ll b,ll c){ll ans=0;for(;b;b>>=1,a=(a+a)%c)if(b&1)ans=(ans+a)%c;return ans;}
ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=mul(a,a,c))if(b&1)ans=mul(ans,a,c);return ans;}
void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
unsigned int g[N]={0},ANS[N];
ll F[N]={0};
int prime[N],tot=0;
bool vis[N];
short int mu[N];
pair<ll,int>f[N];
struct node{
    int n,m,a,id;
    bool friend operator <(node x,node y){
        return x.a<y.a;
    }
}QQ[N];
void up(int id,unsigned int x){
    for(int i=id;i<=100000;i+=i&(-i))g[i]+=x;
}
unsigned int Q(int id){
    unsigned int ans=0;
    for(int i=id;i;i&=i-1)ans+=g[i];
    return ans;
}
void pre(){
    mu[1]=1;
    for(int i=2;i<N;i++){
        if(!vis[i])prime[++tot]=i,mu[i]=-1;
        for(int j=1;j<=tot&&i*prime[j]<N;j++){
            vis[i*prime[j]]=1;
            if(i%prime[j]==0){
                mu[i*prime[j]]=0;
                break;
            }else mu[i*prime[j]]=-mu[i];
        }
    }
    for(int i=1;i<N;i++)
    for(int j=i;j<N;j+=i)
    F[j]+=i;
    for(int i=1;i<N;i++)f[i]={F[i],i};
    sort(f+1,f+N);
}
unsigned int solve(int n,int m){
    unsigned int ans=0;
    if(n>m)swap(n,m);
    for(int i=1,last;i<=n;i=last+1){
        last=min(n/(n/i),m/(m/i));
        ans+=(unsigned int)((n/i)*(m/i)*(Q(last)-Q(i-1)));
    }
    return ans;
}
int main(){
    pre();
    int t;cin>>t;
    for(int i=1;i<=t;i++)sc("%d%d%d",&QQ[i].n,&QQ[i].m,&QQ[i].a),QQ[i].id=i;
    sort(QQ+1,QQ+1+t);
    int pos=0;
    for(int cas=1;cas<=t;cas++){
        while(pos+1<=100000&&QQ[cas].a>=f[pos+1].first){
            pos++;
            for(int i=f[pos].second;i<N;i+=f[pos].second)up(i,f[pos].first*mu[i/f[pos].second]);
        }
        ANS[QQ[cas].id]=solve(QQ[cas].n,QQ[cas].m);
    }
    for(int i=1;i<=t;i++)printf("%d\n",ANS[i]&oo);
}