我是好人

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

解法:

一个非常重要的转化:求(x, y) = k, 1 <= x, y <= n的对数等于求(x, y) = 1, 1 <= x, y <= n/k的对数


#include <stdio.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <algorithm>
#include <vector>
#include <string.h>
#include <queue>
#include <stack>
#include <set>
#include <sstream>
#include <time.h>
#include <utility>
#include <malloc.h>
#include <stdexcept>
#include <iomanip>
#include <iterator>  

using namespace std;

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

void solve(long long N)
{
    int ans = 0;
    for (long long i = 1; i <= sqrt(N*1.0); i++)
    {
        if (N%i == 0)
        {
            long long j = N / i;
            if (gcd(i, j) == 1)
                ans++;
        }
    }
    printf("%d\n",ans);
}

int main()
{
    int t;
    long long n, m;
    scanf("%d",&t);
    while (t--)
    {
        scanf("%lld%lld",&n,&m);
        if (m % n != 0)
        {
            printf("0\n");
            continue;
        }
        long long tmp = m / n;
        solve(tmp);
    }
    return 0;
}
时间: 2024-07-30 10:17:38

我是好人的相关文章

广州工业大学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[

[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

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

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

一些基本笔试

#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

DTD文档类型定义文件简介

dtd 基本概念: dtd ( document type definition  文档类型定义),该文件一般和xml文件配合使用, 主要的用处是约束 xml. 除了 dtd 技术外, 还有一个schema的技术也可以用于约束xml文件的书写规范. 现在请看一个问题: <stu id="a"0&apos;0&apos;1<" > <name>杨过</name> <sex>男</sex> <

小时到分钟 - 一步步优化巨量关键词的匹配

* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif; font-size: 15px } p { line-height: 25.6px; text-align: justify; margin: 23.7px 0 } blockquote { b

Java基础-常用的String方法

先从String的new的方式 说起 这是面试题里面经常出现的 算是老套路之一 就是 比较下列两个的变化 两种实例化的区别 第一种String name1 = "好人";String name2 = "好人";name1和name2指向了同一空间,"haoren"只存储了一次 第二种String name4 = new String("坏人");String name5 = new String("坏人")