• 整数对


    题目描述

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

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

    输入格式

    有多组数据。

    第一行输入一个整数,表示有 TT 组数据( 1 le T le 101T10 )。

    对于每一组测试数据:输入一行,包含三个整数 n,m,pn,m,p ,以空格分隔( 1 le n,m le 10^9, 1 le p le 10^51n,m109,1p105 )。

    输出格式

    对于每一组数据,输出一行。

    每行只包含一个整数,表示满足条件的整数对的数量。

    提示

    针对样例输入1:一共有 55 个整数对,分别是 (1,3),(2,3),(3,3),(3,1),(3,2)(1,3),(2,3),(3,3),(3,1),(3,2)。

    输出时每行末尾的多余空格,不影响答案正确性

    样例输入1

    1
    3 3 3

    样例输出1

    5

    样例输入2

    1
    10 20 15

    样例输出2

    29
    
    
    #include <bits/stdc++.h>
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int maxn=5e5+5,lim=3e5;
    int T;
    ll n,m;
    int p;
    ll ans=0;
    int main(){
        //freopen("1.txt","r",stdin);
        scanf("%d",&T);
        while(T--){
            ans=0;
            scanf("%lld%lld%d",&n,&m,&p);
            ll pre=n/p;
            for(register int i=0;i<p;++i){
                ll cur=m/(p/__gcd(i,p));
                if(i==0){
                    ans+=pre*cur;
                }
                else if(i>0&&i<=n%p){
                    ans+=(pre+1)*cur;
                }
                else if(i>n%p&&i<p){
                    ans+=pre*cur;
                }
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    时间序列模型文章收集
    因果推断文章收集
    Git常用命令
    redis配置
    团队作业2:需求分析&原型设计
    团队项目作业1-团队展示与选题
    结对编程1-模块化
    个人作业2:APP案例分析
    为农三载
    面试题随记一
  • 原文地址:https://www.cnblogs.com/czy-power/p/11343869.html
Copyright © 2020-2023  润新知