我正在做一些自学的Java,但似乎无法解决这个循环中的问题:
问题是找到两个整数n1和n2的最大公约数,其中d是较小的值。方法是递减d直到GCD或它达到1。。。以下是我目前的情况:
Scanner input = new Scanner(System.in);
System.out.println("Please enter two integers: ");
int n1 = input.nextInt();
int n2 = input.nextInt();
int d = 0;
int temp = 0;
//finds the lowest value
if(n1 < n2) {
temp = n1;
n1 = n2;
n2 = temp;
}
for(d = n1;(n1 % d !=0 && n2 % d != 0);d--) {
}
System.out.println("The GCD of " + n1 + " and " + n2 + " is " + d);
有什么指示吗?
这样做怎么样:
for(d = n1; d > 1; d--) {
if(n1%d == 0 && n2%d == 0)
break;
}
public static long gcd(long a, long b){
long factor= Math.max(a, b);
for(long loop= factor;loop > 1;loop--){
if(a % loop == 0 && b % loop == 0){
return loop;
}
}
return 1;
}
迭代欧几里得算法
public static int gcd(int a, int b) //valid for positive integers.
{
while(b > 0)
{
int c = a % b;
a = b;
b = c;
}
return a;
}
优化迭代
static int gcd(int a,int b)
{
int min=a>b?b:a,max=a+b-min, div=min;
for(int i=1;i<min;div=min/++i)
if(max%div==0)
return div;
return 1;
}
递归的
public static long gcd(long a, long b){
if(a == 0) return b;
if(b == 0) return a;
if(a > b) return gcd(b, a % b);
return gcd(a, b % a);
}
内置
import java.math.BigInteger;
public static long gcd(long a, long b){
return BigInteger.valueOf(a).gcd(BigInteger.valueOf(b)).longValue();
}
通过-http://rosettacode.org/wiki/Greatest_common_divisor
这里的逻辑是错误的:
(n1 % d !=0 && n2 % d != 0)
改为:
(n1 % d !=0 || n2 % d != 0)
或者,一旦看到n1或n2的除数,代码就会停止,而不是它们的GCD,因为循环终止条件应该是你想要做的事情的否定。
我试图让这个程序计算两个用户输入的正整数(x和y)的最大公约数(GCD)。set函数不返回可以索引的列表。关于如何找到GCD有什么建议吗?
计算两个或两个以上数字/数字数组的最大公约数。 内部的 _gcd 函数使用递归。基本情况是,当 y 等于 0 的情况下,返回 x 。否则,返回 y 的最大公约数和x / y的其余数。 const gcd = (...arr) => { const _gcd = (x, y) => (!y ? x : gcd(y, x % y)); return [...arr].reduce((a, b)
问题内容: 我已经看到存在这样的功能,即。是否有在Java中的其它功能也适用于其他类型的工作(,或)?似乎这是有意义的(带有各种重载),但是它不存在。在别的地方吗? (请不要将此问题与“我如何自己实现”混淆!) 问题答案: 对于int和long而言,作为原语,并非如此。对于Integer,有人可能写了一个。 假设BigInteger是int,Integer,long和Long的(数学/函数)超集,
Python3 实例 以下代码用于实现最大公约数算法: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com # 定义一个函数 def hcf(x, y): """该函数返回两个数的最大公约数""" # 获取最小值 if x > y: smaller = y else: smaller = x for i in range
本文向大家介绍Java求解两个非负整数最大公约数算法【循环法与递归法】,包括了Java求解两个非负整数最大公约数算法【循环法与递归法】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java求解两个非负整数最大公约数算法。分享给大家供大家参考,具体如下: 代码功能: 1.Java实现(完整源码附测试用例); 2.求解两个非负整数p,q(p>=q)的最大公约数; 3.循环法 以及 递归法两种
本文向大家介绍java求最大公约数与最小公倍数的方法示例,包括了java求最大公约数与最小公倍数的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java求最大公约数与最小公倍数的方法。分享给大家供大家参考,具体如下: Gongyueshu.java文件: 此处需要由控制台输入参数,eclipse环境运行的设置步骤为Run》Run Configurations进入运行的调试配置界面