我有以下声明,我不太清楚它的要求:
我们说n号是罕见的,当它验证任何数字m <= n并且两者都是它们之间的堂兄弟时,事实证明m是素数(当最大的共同时,两个数字是彼此的堂兄弟两个数的除数是统一的)。
编写一个程序,列出3和用户输入的值之间的所有罕见数字
在考虑如何从声明中删除它后,我得到了解决方案,我不知道它是否是正确的解决方案。
有人可以证实它很好,结果是他真正要求的吗?
import java.util.Scanner;
public class Cousins {
public static void main(String[] args) {
System.out.println("Enter a number to calculate the cousins:");
Scanner teclado = new Scanner(System.in);
int n = teclado.nextInt();
boolean cousins;
for (int m = 3; m < n; m++) {
cousins = mcd(n, m);
if (cousins == true) {
System.out.println(n + " " + m + " They are cousins among themselves.");
} else if (cousins == false) {
System.out.println(n + " " + m + " They are not cousins to each other.");
}
}
}
public static boolean mcd(int n, int m) {
boolean cousins = true;
for (int i = 2; i <= n; i++) {
if (n % i == 0 && m % i == 0) {
cousins = false;
}
}
return cousins;
}
}
答案 0 :(得分:0)
for (int i = 2; i <= n && i <= m; i++)
但这不是你应该做的。你需要检查,从3到n的数字是否很少,而不是与n的堂兄弟。 要做到这一点,你基本上需要第二个循环:对于3和n之间的每个数字m,你必须迭代小于m的数字,看看i和m是否是堂兄弟。对于任何数字i,此检查返回true,看看这是否为素数。如果我所有的表兄弟都是素数,那么m很少见。
这是我的尝试:
import java.util.Scanner;
public class Cousins {
public static void main(String[] args) {
System.out
.println("Enter a number to calculate the cousins:");
Scanner teclado = new Scanner(System.in);
int n = teclado.nextInt();
boolean cousins;
for (int m = 3; m < n; m++) {
boolean rare = true;
// Needless to check 1 as 1 is cousin to any number and is prime
for(int i = 2; i <= m; i++) {
if(mcd(i, m) && !numberIsPrime(i)) {
rare = false;
}
}
if(rare) {System.out.println(m + " is rare.");}
else {System.out.println(m + " is not rare.");}
}
}
public static boolean mcd(int n, int m) {
boolean cousins = true;
for (int i = 2; i <= n && i <= m; i++) {
if (n % i == 0 && m % i == 0) {
cousins = false;
}
}
return cousins;
}
public static boolean numberIsPrime(int n) {
boolean prime = true;
for(int i = 2; i < n; i++) {
if(n % i == 0) {prime = false;}
}
return prime;
}
}
编辑:抱歉,我上面的描述有点不对,我现在已经纠正了。
编辑:关于你的评论:你写的程序的输出(3,4,6,8等)是根据罕见的定义,在1和100之间的罕见数字的完全正确的列表你给了。好的,我们来看一些例子。我们取5号并检查5是否罕见。为了检查这一点,我们必须经历从1到5的所有整数。如果它们中的任何一个是5的表兄弟,但不是素数,那么5并不罕见。否则5是罕见的(根据您对稀有的定义)。让我们这样做:所以我们找到了一个数字i&lt; 5是5的表亲,但不是素数。所以5并不罕见,这就是为什么5不是程序输出的一部分。
我希望现在更清楚了。