J'essaie d'écrire une méthode qui calcule si deux nombres sont relativement premiers pour une assignation. Je cherche principalement à savoir par où commencer. Je sais qu'il existe une méthode gcd()
qui en fera beaucoup pour moi, mais la tâche me force à le faire sans gcd ni tableaux.
J'ai en quelque sorte commencé, car je sais que je devrai utiliser l'opérateur %
dans une boucle for.
public static boolean relativeNumber(int input4, int input5){
for(int i = 1; i <= input4; i++)
Il est évident que cette méthode ne renverra que true
ou false
car la fonction main
ne fera qu'imprimer une ligne spécifique selon que les deux nombres sont relativement premiers ou non.
Je pense que je vais probablement devoir écrire deux boucles for
, à la fois pour input4
et input5
, et éventuellement une sorte d'instruction if
avec un opérande logique &&
, mais je ne suis pas sûr.
Dans le cas où ils sont relativement premiers, le plus grand commun diviseur est un, car sinon, les deux nombres pourraient être divisés par ce nombre. Il suffit donc d’un algorithme pour calculer le plus grand commun diviseur, par exemple La méthode d’Euclid :
private static int gcd(int a, int b) {
int t;
while(b != 0){
t = a;
a = b;
b = t%b;
}
return a;
}
Et alors:
private static boolean relativelyPrime(int a, int b) {
return gcd(a,b) == 1;
}
L'algorithme de Euclid fonctionne dans O (log n), ce qui est bien plus rapide que d'énumérer tous les diviseurs potentiels pouvant être optimisés pour O (sqrt n).
Swift 4 code pour @ williem-van-onsem answer;
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
}
Usage;
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
}
}
}
Je pense que c'est la solution simple. Posez des questions dans les commentaires.