2つの数値が割り当てに対して比較的素数であるかどうかを計算するメソッドを記述しようとしています。私は主にどこから始めるべきかについての答えを探しています。私のために多くのことを行うメソッドgcd()
があることは知っていますが、割り当てによって、gcdや配列なしで実行できるようになります。
Forループで_%
_演算子を使用する必要があることがわかっているので、私はそれを始めました。
_public static boolean relativeNumber(int input4, int input5){
for(int i = 1; i <= input4; i++)
_
明らかに、このメソッドは、true
またはfalse
を返すだけです。これは、main
関数は、2つの数値が比較的素数であるかどうかに応じて特定の行のみを出力するためです。
おそらく_input4
_と_input5
_の2つのfor
ループ、およびおそらく論理_&&
_オペランドを含むif
ステートメントの2つを記述する必要があると思いますが、私はわからない。
まあそれらが比較的素数である場合、最大の共通の除算器は1です。したがって、たとえば Euclidの方法 のように、最大の一般的な除算器を計算するアルゴリズムのみが必要です。
private static int gcd(int a, int b) {
int t;
while(b != 0){
t = a;
a = b;
b = t%b;
}
return a;
}
その後:
private static boolean relativelyPrime(int a, int b) {
return gcd(a,b) == 1;
}
EuclidのアルゴリズムはO(log n)で動作するため、はるかに高速ですO(sqrt n)に最適化できるすべての潜在的な除数を列挙するよりも.
Swift 4 @ williem-van-onsem回答のコード。
func gcd(a: Int, b: Int) -> Int {
var b = b
var a = a
var t: Int!
while(b != 0){
t = a;
a = b;
b = t%b;
}
return a
}
func relativelyPrime(a : Int, b: Int) -> Bool{
return gcd(a: a, b: b) == 1
}
使用法;
print(relativelyPrime(a: 2, b: 4)) // false
package stack;
import Java.util.Scanner; //To read data from console
/**
*
* @author base
*/
public class Stack {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in); // with Scanner we can read data
int a = in.nextInt(); //first variable
int b = in.nextInt(); //second variable
int max; // to store maximum value from a or b
//Let's find maximum value
if (a >= b) {
max = a;
} else {
max = b;
}
int count = 0; // We count divisible number
for (int i=2; i<=max; i++) { // we start from 2, because we can't divide on 0, and every number divisible on 1
if (a % i == 0 && b % i==0) {
count++; //count them
}
}
if (count == 0) { // if there is no divisible numbers
System.out.println("Prime"); // that's our solutions
} else {
System.out.println("Not Prime"); //otherwise
}
}
}
これは簡単な解決策だと思います。コメントで質問してください。