整数对

整数对

枚举余数

 

码队的弟弟喜欢做数学题。这不,听说你也喜欢做数学题,码队的弟弟非常高兴,决定立刻送给你一道数学题,请你完成。

给定三个整数 n,m,p求满足$ a \times b = k \times pa×b=k×(1 \le a \le n, 1 \le b \le m, k1an,1bm,k为任意正整数 ))$的整数对 (a,b)(a,b) 的数量。

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

int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
    ll n,m,p;
    scanf("%lld%lld%lld",&n,&m,&p);
    ll t=n/p;
    ll ans=0;
    for(ll r=0;r<=p-1;r++){
        if(r==0){
            ans+=t*m;
        }else if(r<=n%p){
            ans+=(t+1)*(m/(p/__gcd(r,p)));
        }
        else ans+=t*(m/(p/__gcd(r,p)));
    }
        cout<<ans<<'\n';
    }
}

 

posted @ 2019-08-10 22:57  liulex  阅读(207)  评论(0编辑  收藏  举报