1266: gcd和lcm(Java)
WUSTOJ 1266: gcd和lcm
参考
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
题目数据范围做了少许改动。
分析
- 当最大公约数(x)和最小公倍数(y)相同时,
a
,b
的取值只能有一种情况,即a = b = x = y
。 - 如果存在
a
,b
,则a * b * x = y
,那么y % x = 0
,因此如果余数不为0
,那么种数为0
。 - 如果存在
a
,b
,那么x * z = y
且a * b = z
,因此,只需要将a
从1
循环到z
的开方数即可。 - 对于
a
,b
还要满足互质才有效,如果不互质,那么最大公约数就不是x
了,判断互质用辗转相除即可。 - 由于
a
,b
的值可以互换,因此每组满足条件的互质数,种数都要加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)的更多相关文章
- poj 2429 GCD & LCM Inverse 【java】+【数学】
GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9928 Accepted: ...
- HDOJ 4497 GCD and LCM
组合数学 GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU 4497 GCD and LCM (合数分解)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- hdu4497 GCD and LCM
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...
- HDU 4497 GCD and LCM(数论+容斥原理)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- 数论——算数基本定理 - HDU 4497 GCD and LCM
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- hdu 4497 GCD and LCM (非原创)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- 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 ...
- GCD 与 LCM UVA - 11388
题目链接: https://cn.vjudge.net/problem/23709/origin 本题其实有坑 数据大小太大, 2的32次方,故而一定是取巧的算法,暴力不可能过的 思路是最大公因数的倍 ...
随机推荐
- ansible 错误记录(1)
基本环境:docker基于centos7 在docker里面安装ansible 不管是在root还是普通用户下执行 ansible all -m ping 都报如下错误: 172.20.1.1 | ...
- 如何利用shell或者awk二维数组实现9x9乘法表?
第一种:利用shell for循环来实现. for i in `seq 1 9`do for j in `seq 1 9` do if [ $i -ge $j ] then echo -en &quo ...
- codeforces319C
C. Kalila and Dimna in the Logging Industry time limit per test 2 seconds memory limit per test 256 ...
- IDEA启动Tomcat服务器时某些端口(如1099端口)被占用的解决办法
启动Tomcat服务器时,出现1099端口被其它进程占用了解决办法: 1.找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口,使用命令:netstat -aon|fin ...
- CodeForces - 1175B Catch Overflow!(栈模拟多重for循环)
You are given a function ff written in some basic language. The function accepts an integer value, w ...
- python 将数据写入excel
摘要链接: python第三方库——xlrd和xlwt操作Excel文件学习 :http://blog.csdn.net/wangkai_123456/article/details/50457284 ...
- legend3---17、如何抽象和复用控制器中的方法
legend3---17.如何抽象和复用控制器中的方法 一.总结 一句话总结: 比如不同的控制器中都用了检查手机号是否已经注册,是否没注册这样的功能,我应该如何抽象和复用方法 新建一个处理手机号码的模 ...
- 深度学习: 学习率 (learning rate)
Introduction 学习率 (learning rate),控制 模型的 学习进度 : lr 即 stride (步长) ,即反向传播算法中的 ηη : ωn←ωn−η∂L∂ωnωn←ωn−η∂ ...
- 分享CSS3里box-shadow属性的使用方法,包括内阴影box-shadow:inset
一.box-shadow语法 box-shadow: none | inset(可选值,不设置,为外投影,设置,为内投影) x-offset(阴影水平偏移量,正方向为right) y-offset(阴 ...
- wcf 错误提示
wcf 不弹出错误提示,只显示“服务器处理请求时遇到错误.有关构造有效服务请求的内容,请参阅服务帮助页”,添加以下节点可以弹出错误提示. <serviceDebug includeExcepti ...