执行程序编号罕见表兄弟java

时间:2017-11-18 14:09:24

标签: java

我有以下声明,我不太清楚它的要求:

我们说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;
       }
  }

1 个答案:

答案 0 :(得分:0)

嗯,这对我来说似乎不太正确。这是正确的,如果你的练习是检查从3到用户输入的数字(我们称之为n)的数字是否是带有n的表兄弟。这就是你在程序中所做的事情: 你将integeres从3循环到n并检查当前的数字和n是同类。顺便说一句,在函数mcd()里面的循环中,我会为完成添加第二个条件,如下所示:

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 = 1:1表兄是5吗?是的,因为唯一的公约数是1.是1素数吗?是。好。继续i = 2.
  • i = 2:2是2的堂兄吗?是的,因为唯一的公约数是1.是2素数吗?好的。继续。
  • i = 3:3表兄弟是5吗?是的,因为唯一的公约数是1.是3素数吗?好的。继续。
  • i = 4:4是5的表亲吗?是的,因为唯一的常见除数是1.是4素数吗?没有!!!

所以我们找到了一个数字i&lt; 5是5的表亲,但不是素数。所以5并不罕见,这就是为什么5不是程序输出的一部分。

我希望现在更清楚了。