HDU-2504-又见GCD(Java强行暴力水过!)

又见GCD

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 12371    Accepted Submission(s): 5257

Problem Description

有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b。若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c。

Input

第一行输入一个n,表示有n组测试数据,接下来的n行,每行输入两个正整数a,b。

Output

输出对应的c,每组测试数据占一行。

Sample Input

2
6 2
12 4

Sample Output

4
8

Source

《ACM程序设计》短学期考试_软件工程及其他专业

Recommend

lcy   |   We have carefully selected several similar problems for you:  2501 1003 1106 1257 1124

这题确实有点误导性,我刚开始看的时候!a和c的最大公约数是b,而要求c最小!那c肯定是2*b啦!

唯一要考虑的不就是a==2*b的时候!那c便等于3*b!这不是脑残题吗?

但是......这个思路是错误的!因为当你求出你认为的的c的时候,有可能此时的a,c得最大公约数发生

了变化即此时的b不是最大公约数了,因为b可能并没有你求出a和c当中的那个公因子!

就像

a=24     b=4    c=20

而不是

a=24     b=4    c=16

给几组测试数据:

a=100   b=2    c=6

a=8       b=2     c=6

a=4       b=4     c=8

a=10     b=5     c=15

我的方法!Java暴力水过!求出b的所有倍数,然后GCD算法判断!

import java.io.*;
import java.util.*;

public class Main
{

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		for(int i=0;i<n;i++)
		{
			int a = input.nextInt();
			int b = input.nextInt();
			for(int j=2;j<1000000;j++)
			{
				if(b==GCD(a,b*j))
				{
					System.out.println(b*j);
					break;
				}
			}
		}
	}

	public static int GCD(int a,int c)
	{
		if(a<c)
		{
			return GCD(c,a);
		}
		if(a%c!=0)
		{
			return GCD(c, a%c);
		}
		else
		{
			return c;
		}
	}
}
时间: 2024-10-15 13:56:53

HDU-2504-又见GCD(Java强行暴力水过!)的相关文章

HDU 2504 又见GCD (最大公因数+暴力)

题意:是中文题. 析:a和c的最大公因数是b,也就是说,a和c除了b就没有公因数了.再说就是互质了. 所以先把a除以b,然后一个暴力n,满足gcd(a, n) =1,就结束,就是n倍的c. 代码如下: #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <cstring> #incl

hdu 2504 又见Gcd

有时候觉得自己也挺天才滴~O(∩_∩)O~,小小鼓励下.(虽然是道大水题吧....囧) 1 #include<stdio.h> 2 int Gcd(int m,int n) 3 { 4 return m==0?n:Gcd(n%m,m); 5 } 6 int main() 7 { 8 int n; 9 scanf("%d",&n); 10 while(n--) 11 { 12 int a,b,i; 13 scanf("%d%d",&a,&a

HDU 2504 又见GCD(最大公约数与最小公倍数变形题)

又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18480    Accepted Submission(s): 7708 Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. Input 第一行输入一个n

hdoj 2504 又见GCD 【GCD判定】

思路:一个一个的找,因为c不等于b 且b是(a, c)的最大公约数, 所以c是b的整数倍, 每找到一个c就判断与 a的最大公约数是不是b,不是的话,就继续 刚开始的时候 居然把gcd非递归形式忘了...也没想用递归形式.. 又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10151    Accepted Submissio

HDU 2054 又见GCD(水题??)

又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15221    Accepted Submission(s): 6397 Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. Input 第一行输入一个n

HDU ACM 2504 又见GCD

分析:水题,但要注意当c取2*b时,a可能被c整除,此时a继续加b继续判断. #include<iostream> using namespace std; int gcd(int a,int b) { int r; while(b) { r=a%b; a=b; b=r; } return a; } int get(int a,int b) { int c; c=2*b; while(gcd(c,a)!=b) c+=b; return c; } int main() { int n,a,b;

HDU 1722 Cake (数论 gcd)(Java版)

Big Number 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1722 --每天在线,欢迎留言谈论. 题目大意: 给你两个数 n1,n2 . 然后你有一块蛋糕,提前切好,使得不管来 n1 还是 n2 个人都能够当场平均分配. 求 "提前切好" 的最小蛋糕块数. 知识点: (请无视)公式:N = a + b + gcd(a, b) : 思路: (勿无视)先份成p块,然后再拼到一起,再从原来开始的地方,将蛋糕再分成q份,中间肯定会出现完

HDU 1316 How Many Fibs? java大数(水

水一水.. import java.math.*; import java.util.*; import java.io.*; public class Main { BigInteger[] fib = new BigInteger[505]; public void work(){ fib[1] = BigInteger.ONE; fib[2] = BigInteger.valueOf(2); for(int i = 3; i <= 500; i++) fib[i] = fib[i-1].a

又见GCD(杭电2504)(gcd)

又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11122    Accepted Submission(s): 4696 Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. Input 第一行输入一个n