• . Number throry


    steve 学完了快速幂,现在会他快速的计算:(ij)%d , Alex 作为一个数学大师,给了 steve 一个问题:已知
    i[1,n],j[1,m] ,计算满足 (ij)%d=0 的 (i,j) 的对数。

    输入格式

    T组输入,对于每一组输入三个数n,m,d
    (1T1000,1n,m,d109)

    输出格式

    对于每组输入,输出答案,每个答案占一行。

    样例

    input
    4
    3 10 7
    3 5 3
    10 30 6
    100 100 8
    
    output
    0
    5
    30
    4937
    不太懂,,先记下来再说
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll qpow(ll a,ll b){
        ll ans=1;
        while(b){
            if(b&1) ans=(ans*a);
            a=(a*a);
            b>>=1;
        }
        return ans;
    }
    int main(){
        int T;scanf("%d",&T);
        while(T--){
            ll n,m,d;
            scanf("%lld %lld %lld",&n,&m,&d);
            vector<pair<ll,ll> > prs;
            vector<pair<ll,ll> >::iterator it;
            for(ll i=2;i*i<=d;i++){
                if(d%i==0){
                    long long cnt=0;
                    while(d%i==0){
                        d/=i;cnt++;
                    }
                    prs.push_back({i,cnt});
                }
            }
            ll res=0;
            if(d!=1) prs.push_back({d,1});
            for(ll j=1;j<=min(m,1LL*30);j++){
                ll g=1;
    //            for(auto v:prs)
                for(it=prs.begin();it!=prs.end();it++)
                {
                    g*=qpow( it->first,( it->second+j-1)/j);
                }
                if(j==30) res+=(m-29)*(n/g);
                else res+=n/g;
            }
            printf("%lld
    ",res);
        }
        return 0;
    }
  • 相关阅读:
    PHP学习—了解篇2
    PHP学习—了解篇
    德国山寨史
    Network client/server
    Linux (二) vi
    I2C 总线协议
    Verilog (二) multiplexer and decoder
    有限状态机HDL模板
    "德意志之歌"的历史
    【转】java与.net比较学习系列(3) 基本数据类型和类型转换
  • 原文地址:https://www.cnblogs.com/Accepting/p/11374466.html
Copyright © 2020-2023  润新知