WUSTOJ 1266: gcd和lcm

参考

1naive1的博客

Description

  已知a,b的最大公约数为x,也即gcd(a,b)=x; a,b的最小公倍数为y,也即lcm(a,b)=y.给出x,y.求满足要求的a和b一共有多少种。

Input

  多组测试样例。每组给两个整数x,y.(1<=x<=100000,1<=y<=1000000000).

Output

  对于每个测试样例,输出一个整数,表示满足要求的(a,b)的种数。

Sample Input

3 60
2 2

Sample Output

4
1

HINT

  题目数据范围做了少许改动。

分析

  1. 当最大公约数(x)和最小公倍数(y)相同时,ab的取值只能有一种情况,即a = b = x = y
  2. 如果存在ab,则a * b * x = y,那么y % x = 0,因此如果余数不为0,那么种数为0
  3. 如果存在ab,那么x * z = ya * b = z,因此,只需要将a1循环到z的开方数即可。
  4. 对于ab还要满足互质才有效,如果不互质,那么最大公约数就不是x了,判断互质用辗转相除即可。
  5. 由于ab的值可以互换,因此每组满足条件的互质数,种数都要加2

代码

/**
* 用时:284ms
* @author PengHao
* @version A1.1
* @date 2019年4月17日 上午11:21:53
*/
import java.util.Scanner; public class Main { private Scanner sc;
private int x, y; // 最大公约数和最小公倍数 public Main() {
sc = new Scanner(System.in);
while (sc.hasNext()) {
x = sc.nextInt();
y = sc.nextInt();
System.out.println(count());
}
sc.close();
} /**
* @return 种数
*/
private int count() {
// 最大公约数和最小公倍数相等
if (x == y) {
return 1;
}
// 最小公倍数与最大公约数不是倍数关系
if (0 != y % x) {
return 0;
}
int z = y / x;
int j, num;
num = 0; // 初始0种
// 小于等于开方数即可
for (int i = 1; i * i <= z; i++) {
j = z / i;
// 倍数关系才能计算
if (0 == z % i) {
// 判断i,j是否互质,互质的话加2,a,b可互换
if (coPrime(i, j)) {
num += 2;
}
}
}
return num; // 返回种数
} /**
* 辗转相除法,来自百度百科
*
* @param a 一个数
* @param b 另一个数
* @return true 如果a和b互质
*/
private boolean coPrime(int a, int b) {
while (true) {
a = a % b;
if (0 == a) {
return 1 == b ? true : false;
}
b = b % a;
if (0 == b) {
return 1 == a ? true : false;
}
}
} /**
* @param args
*/
public static void main(String[] args) {
new Main();
}
}

1266: gcd和lcm(Java)的更多相关文章

  1. poj 2429 GCD &amp; LCM Inverse 【java】+【数学】

    GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9928   Accepted:  ...

  2. HDOJ 4497 GCD and LCM

    组合数学 GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  3. HDU 4497 GCD and LCM (合数分解)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  4. hdu4497 GCD and LCM

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...

  5. HDU 4497 GCD and LCM(数论+容斥原理)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  6. 数论——算数基本定理 - HDU 4497 GCD and LCM

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  7. hdu 4497 GCD and LCM (非原创)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  8. hdu 4497 GCD and LCM 数学

    GCD and LCM Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4 ...

  9. GCD 与 LCM UVA - 11388

    题目链接: https://cn.vjudge.net/problem/23709/origin 本题其实有坑 数据大小太大, 2的32次方,故而一定是取巧的算法,暴力不可能过的 思路是最大公因数的倍 ...

随机推荐

  1. Java基础系列 - HashMap

    package com.test3; import java.util.ArrayList; import java.util.HashMap; import java.util.List; impo ...

  2. harukaの收藏夹

    #include<map> 比较好的图论作图网站 heap Sth About EXCRT OI-Wiki 数学 树形dp入门 开开心心学背包 一起复习qwq 模板库(非原创) LaTex ...

  3. 使用LAS数据集创建DEM和DSM

    作为 LAS 数据集转栅格工具的输入.大多数情况下,此工具的栅格化通过点的快速分组来完成.由于激光雷达相比较于其他采样技术比较密集,所以许多人相信分组已经足够了,不需要更耗时的插值方法.可以证明上述观 ...

  4. fileBeat的简单使用

    Beat的简单使用 Filebeat配置 Output 常见日志格式封装 简单使用filebeat格式化nginx日志 Filebeat的配置: # 修改filebeat.yml # vim file ...

  5. 【集成模型】Stacking

    0 - 思路 Stacking是许多集成方法的综合.其主要思路如下图所示,通过训练数据训练多个base learners(the first-level learners),这些learners的输出 ...

  6. Gitlab分支保护

    问题:使用Git时,会碰到需要对某个分支进行保护,避免其他人随意push. 这里以gitlab为例,具体操作如下: 1.进入项目 2.点击左侧列表中的Settings 3.点击Protected Br ...

  7. redis未设置idle超时时间导致连接过多

    今天ELK收集日志的时候,发现收集失败,查找各方面原因,最后在redis日志里面发现报错:[2489] 02 Jun 10:43:42 # Error allocating resoures for ...

  8. 【Leetcode_easy】788. Rotated Digits

    problem 788. Rotated Digits solution1: class Solution { public: int rotatedDigits(int N) { ; ; i< ...

  9. 【Leetcode_easy】594. Longest Harmonious Subsequence

    problem 594. Longest Harmonious Subsequence 最长和谐子序列 题意: 可以对数组进行排序,那么实际上只要找出来相差为1的两个数的总共出现个数就是一个和谐子序列 ...

  10. Azure DevOps的variable group实现array和hashtable参数的传递

    Azure Devops中的variable group建议或者只能(?)添加string类型的value.基于此我们想在variable group实现array或者hashtable的传递的核心思 ...