GDUT决赛 我是好人

Problem F: 我是好人

Description

众所周知,我是好人!

所以不会出太难的题,题意很简单 给你两个数n和m,问你有多少对正整数对最大公约数是n,最小公倍数是m

最后友情提供解题代码(我真是太好人了)

void solve()

{

long long n, m;

scanf("%lld%lld", &n, &m);

int ans = 0;

for (long long i = 1; i <= m; i++)

{

for (long long j = i; j <= m; j++)

{

if (gcd(i, j) == n && lcm(i, j) == m) ans++;

}

}

printf("%d\n", ans);

}

祝大家AC愉快!最好AK,送某扬兑现诺言^_^

Input

输入第1行是一个整数T,表示共T组数据。 接下来是T组数据,每组数据占1行,每一行有2个整数n,m(1 <= n, m <= 10000000000),两个数由一个空格隔开。

Output

结果输出T行,对应T组数据。(T<=100)

每行输出这样的正整数对有多少对(看我多好人,不用你们输出所有整数对)

Sample Input

3

1 1

7 10086

4 16

Sample Output

1

0

1

如果存在这样的数对,那么m%n==0,比如 a=9 和 b=15  9=3*3  15=3*15  n=3   m=3*3*5  即m=n*(a与b互质的数的乘积)。所以直接枚举 1~m/n 范围内所有互质的数对就可以啦

#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;

ll t,n,m;

ll gcd(ll a,ll b)
{
    if(b==0) return a;
    return gcd(b,a%b);
}

ll fun(ll x)
{
    ll num=0;

    for(ll i=1;i*i<=x;i++)
    if(x%i==0)
    {
        ll j=x/i;

        if(gcd(i,j)==1) num++;
    }
    return num;
}

int main()
{
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            scanf("%lld %lld",&n,&m);
            if(m%n)
            {
                printf("0\n");
                continue;
            }

            ll a=m/n;
            printf("%lld\n",fun(a));
        }
    }
    return 0;
}
时间: 2024-08-02 05:07:56

GDUT决赛 我是好人的相关文章

[GDUT 决赛]--GCD,LCM——我是好人(数论)

Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你两个数n和m,问你有多少对正整数对最大公约数是n,最小公倍数是m最后友情提供解题代码(我真是太好人了) void solve() { long long n, m; scanf("%lld%lld", &n, &m); int ans = 0; for (long long i = 1; i <= m; i++) { for (long long j = i; j <= m; j

我是好人

Description 众所周知,我是好人! 所以不会出太难的题,题意很简单 给你两个数n和m,问你有多少对正整数对最大公约数是n,最小公倍数是m 最后友情提供解题代码(我真是太好人了) void solve() { long long n, m; scanf("%lld%lld", &n, &m); int ans = 0; for (long long i = 1; i <= m; i++) { for (long long j = i; j <= m;

广州工业大学2016校赛 F 我是好人4 dfs+容斥

Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍数 最后友情提供解题代码(我真是太好人了) void solve(int p[], int n) { int ans = 0; for (int i = 1; i <= 1e9; i++) { int fl = 0; for (int j = 0; j < n; j++) { if (i % p[

ACM学习历程—广东工业大学2016校赛决赛-网络赛F 我是好人4(数论)

题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=5 这个题目一看就是一道数论题,应该考虑使用容斥原理,这里对lcm进行容斥. 不过直接上去是T,考虑到序列中同时存在i和ki的话,其实只需要考虑i,所以先对序列中为倍数的对进行处理. 这里的容斥用了hqw的写法. 代码: #include <iostream> #include <cstdio> #include <cstdlib> #includ

GDUT决赛题解

决赛,我自我认为题目难度更大,反而我的心态更好了. 由于放轻松的时候反而效果更好,跟昨天的观点一样,凡是可以1A的,才算这题做得好. A.数目不大,关键是看懂题(我自己连输入输出是什么都不清楚.... 然后管理员就把题下掉了. . ..批评批评啊. .. )bin神的代码膜拜了下.知道是状态压缩,题中说了最多6个,要么1<<6枚举,要么6!枚举.代码: /* *********************************************** Author :kuangbin Cre

广工校赛决赛之简单的数论题

题目链接:F: 我是好人,题目大意:给你两个数 n 和 m,问你有多少对正整数对最大公约数是n,最小公倍数是m. 因为1 <= n, m <= 10000000000,暴力法肯定超时的,比赛时我也想到了把 n 和 m 分解开,质因数和对应的指数存放在 map 中,思路是正确的,可没想到在一些细节问题上没考虑周全,在没有判断 n 和 m 是否互质前就盲目地把它们进行分解,结果当然是wa了数遍,亏我还在苦苦思索是不是思路出错了,直至今天与文聪讨论时才发现这个瑕疵.用朴素的分解方法已经能够在时限范围

广工2016校赛决赛

重现补的题目. Problem A: Krito的讨伐 思路:不要求一次性杀光一个节点里面的所有怪物. 所以我们可以用一个优先队列.优先去杀那些我们当前可以挑战的,然后注意下处理一个房间可能有多个怪物或者无怪物.当我们杀完第x个房间的怪物时候,那么就把x的下一层的怪物加入队列,如果x的下一层出现了空房间[即房间不存在怪物],那么再把该房间当做新的x,继续加入新x的下一层直到出现了有怪物的房间位置. #define _CRT_SECURE_NO_DEPRECATE #include<iostrea

一些基本笔试

#region 递归 private static int sum(int num) { if (num == 0) { return 1; } else { return num+sum(num - 1); } } #endregion #region 冒泡排序 private static void Maopao() { int[] array =new int[] { 20,5,4,5,8 }; int temp; for (int i = 0; i <array.Length-1; i+

聊聊 virtualenv 和 virtualenvwrapper 实践

各位 Python 的小伙伴肯定多多少少接触过 virtualenv.本文将介绍 virtualenv 以及如何更科学更优雅地使用 virtualenv. virtualenv 首先来聊一下 virtualenv 是个什么鬼. 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题:亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难.此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁.这里,就要隆重介绍 virt