web-dev-qa-db-fra.com

Savoir si deux nombres sont relativement premiers

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.

9
Tony

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).

29
Willem Van Onsem

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
1
Celil Bozkurt
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.

0
BSeitkazin