-3

数値が素数かどうかを判断するプログラムを Java で作成する必要があります。

ユーザーは任意の数字を入力する必要があり、プログラムはそれが素数かどうかを判断し、「素数ではない」または「素数」を表示します。私のコードはコンパイルされて実行されるようになりましたが、素数であっても素数ではないと常に表示されます。

import java.util.Scanner;

public class PrimeNumber
{
 public static void main(String[] args)
  {
    Scanner input = new Scanner(System.in);
   int constant = 0;
   int variable = 0;
   System.out.println("Enter a Number to test if Prime or Not");
   constant = input.nextInt();
   variable = constant;
   double answer = 0.0;
   answer = testPrime(constant, variable);
   System.out.println(+answer);
   if (answer == 1)
    {
     System.out.println(+constant + " is a prime number.");
    }
   else
     {
     System.out.println(+constant + " is NOT a prime number.");
    }
   }

public static double testPrime(int number, int divide)
 {
  double prime = 0.0;
  prime = number%divide;
  if (prime > 0 && divide != number)
   {
    return testPrime(number, divide - 1);
   }
   else
   {
    return prime;
   }
 }
}
4

7 に答える 7

2
if (prime > 0 && divide != number)

これは決して真実ではありません。あなたの除数と数は常に等しいからです。

割り当てたことを確認variable=constantし、それをメソッドに渡します

constant = input.nextInt();
variable = constant;
answer = testPrime(constant, variable);

とはいえ、ある数値が素数かどうかを調べるには、非常に複雑にする必要があります。単純なアルゴリズムについては、Web を確認してください。たとえば、http://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/を参照してください。

于 2013-04-26T18:50:59.900 に答える
1

OPが再帰を望んでいるので、答えではありません(私が推測する宿題)。

除数があるかどうかを確認するには、n の平方根まで行く必要があります (自己以外の除数は < sqrt(n) になります)。

    boolean isPrime(int n) {
            if(n % 2 == 0)return false;
            int till  = (int)java.lang.Math.pow(n, 0.5); //(int)n / 2;
            for(int i= 3;i<till;i+=2) {
                if(n % i == 0) 
                    return false;
            }
            return true;
        }
于 2013-04-26T19:10:46.960 に答える
0

再帰で

import java.util.Scanner;

public class PrimeRecursion
{
    static int dbg;
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter non 0 if you want debug :");
        dbg = input.nextInt();
        long constant = 3;
        long variable = 0;
        while(true){
            System.out.println("Enter a Number to test if Prime or Not (1 to exit)");
            constant = input.nextLong();
            if(constant < 3){
                if(constant == 2){
                    System.out.println("2 is a special prime");
                }
                return;
            }
            if(constant % 2 == 0){
                System.out.println(constant + " is NOT a prime number, even number.");
            }else{
                variable = (long)Math.pow(constant, 0.5);
                variable = (variable % 2 == 1) ? variable : variable + 1;//odd number
                double answer = 0.0;
                answer = testPrime(constant, variable);
                System.out.println("End answer : " + answer);
                if (answer == 1){
                    System.out.println(+constant + " is a prime number. answer : "  + answer);
                }
                else{
                    System.out.println(constant + " is NOT a prime number.answer : "  + answer);
                }
            }
            System.out.println();
        }
    }

    static double testPrime(long number, long divide)
    {
        double prime = 0.0;
        prime = (double)number / divide;
        if(dbg > 0){
            System.out.println("Debug number " + number + " | divide " + divide + " |prime : "  + prime + " | Math.abs(prime) " + Math.abs(prime));
        }
        if (prime == ((long)prime))//whats the best way to do this?
        {
            //divided evenly
            return divide;
        }
        else{
            return testPrime(number, divide - 2);
        }
    }
}
于 2013-04-27T21:12:58.037 に答える
-1

スニペットを書く代わりに、すべてのコードを直接提供しています。できるだけシンプルにするために最善を尽くしたので、皆さんがこれを気に入ってくれることを願っています. コードは次のとおりです:>

import java.util.*;
class Prime_Number
{
    static int c=0;
    public static void main(String args[])
    {
        int n,i,sq=0;
        Scanner in=new Scanner(System.in);
        Prime_Number ob=new Prime_Number();
        System.out.print("Enter a no.:>");
        n=in.nextInt();
        i=n;
        sq=(int)(Math.sqrt(n));//square root is been taken since a no. cannot have factors greater than its square root
        int k=ob.prime_Chk(n,i,sq);
           if(k==1)
              {
                 System.out.println("Prime");
              }
                 else
                     {
                       System.out.println("Non-Prime");
                      }
      }
public int prime_Chk(int g,int i,int sq)
    {
        if(i==sq)
        {
            return c;
        }
        else
        {
            if(g%i==0)
            {
                c++;
            }
            i--;
            return(prime_Chk(g,i,sq));
        }
    }
}

Prime() では、 int i 、 int sq 、および int g を引数として取りました。これらの代わりに、必要に応じて他の変数も取ることができます。

于 2014-08-15T12:49:02.983 に答える
-1
import java.util.Scanner;

public class HW8R_T03 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner sc = new Scanner(System.in);
        System.out.print("Enter number: ");
        int n = sc.nextInt();
        int simple = prime(n,n-1);
        System.out.println(simple==1 ? "prime" : "not prime");

    }

    static int prime(int x, int y){
        int div = 1;
        if (y==0 || y==1){
             return div;
        }
        if (x%y==0){
            div = y;
        } else {
            div = prime (x, --y);
        }
        return div;
    }


}
于 2015-11-24T15:05:32.353 に答える
-1

私にとっての再帰関数は次のようになります-間違っている場合は修正してください.Thank you.calling statement >Boolean b=isPrime(number,number-1); 再帰関数-

void isPrime(int p,int d);
{
int prime=p%d;
if((p==0&&d>1)||p%2==0)
return true;//that the number is not prime
if(d==1)
return false;
else
return isPrime(p,d-2);//calls the function again
}
于 2013-11-01T14:46:05.030 に答える