Questão - java

olá pessoal, eu to com uma dúvida IMENSA (de vdd mesmo, tentei várias coisas mais nao ia nada)
Dois números inteiros são ditos primos entre si
quando não existir um divisor maior do que 1 (um) que divida ambos. Isto
significa que o máximo divisor comum dos primos entre si é igual a 1. Por
exemplo, 12 e 13 são primos entre si; porém, 12 e 14 não o são porque ambos
são divisíveis por 2. Implemente uma função que receba como parâmetro dois
números inteiros positivos, ou seja, maiores que zero, e decida se os números
dados são primos entre si. A função deve retornar true, se os números forem
primos entre si. Caso contrário, ela deve retornar false. Implemente também o
programa principal (main) que utilizará a função. Os valores dos dois números
devem ser fornecidos pelo usuário e validados no programa principal e a exibição
do resultado também deve ocorrer no programa principal. OBS: O usuário
poderá testar quantos números desejar.


Queria saber qual é a lógica que irei usar nos métodos com o true e o false (dos números primos)

Usa o Algoritmo de Euclides pra obter o MDC (máximo divisor comum) dos dois números.
Se o MDC for 1, significa que são primos entre si.

Exemplo:

public boolean saoPrimosEntreSi(int a, int b) {
    return mdc(a, b) == 1;
}
1 curtida

entendi, mas a questão pede pra eu retornar true, se forem primos e false quando não forem
esse algoritmo do mdc que vc disse, eu teria que fazer uma outra função(que eu calcularia o mdc) para a dos primos chamá-la?

public class Gq21 {
public static boolean saoPrimosEntreSi (int a, int b){
return mdc(a,b) == 1;

}
public static int mdc (int n1, int n2){
    int mdc = 1;
    for (int i = 1; i <= n1 && i <= n2; i++){
        if(n1 %i == 0 && n2 % i == 0)
            mdc = i;
    }
    return mdc;
}

eu fiz desse jeito aqui, vc acha que funciona?
sou novato no java xD

Sim, não passei o cálculo do mdc pois você pode pesquisar.
E, conforme o exemplo, o método saoPrimosEntreSi chama o método mdc retornando true se o mdc dos dois números for igual à 1.

Testa, calcula o mdc no papel e confere se seu método está trazendo o mesmo resultado.

1 curtida

consegui fazer a questão aqui, fiz do seguinte modo
package gq21;

importjava.util.Scanner;

publicclass Gq21 {

publicstaticbooleansaoPrimosEntreSi(int a, int b) {
if (mdc(a, b) == 1) {
returntrue;
} else {

return false;
}
}

publicstaticdoublemdc(int n1, int n2) {
if(n1 % n2 == 0){
return n2;
}else{
returnmdc(n2,(n1 % n2));
}
}

publicstaticvoidmain(String[] args) {
Scanner in = new Scanner(System.in);
int n1,n2;
char resp;
do{
System.out.println("Digite um número maior que zero: ");
n1 = in.nextInt();
while(n1 <= 0){
System.out.println("Dado inválido. ");
System.out.println("Digite um número maior que zero: ");
n1 = in.nextInt();
}
System.out.println("Digite outro número maior que zero: ");
n2 = in.nextInt();
while(n2 <= 0){
System.out.println(“Dado inválido.”);
System.out.println("Digite outro número maior que zero: ");
n2 = in.nextInt();

     }

System.out.println(“Os números foram verificados e o programa irá exibir true (se os números são primos entre si)”);
System.out.println(“ou false (se eles não forem primos).”);
System.out.println("resultado = " + saoPrimosEntreSi(n1,n2));
System.out.println(“Deseja fazer outro cálculo? S PARA SIM OU N PARA NÃO”);
resp = in.next().charAt(0);
Character.toUpperCase(resp);
while(resp != ‘S’ &&resp != ‘N’){
System.out.println(“Resposta inválida.”);
System.out.println(“Deseja fazer outro cálculo? S PARA SIM OU N PARA NÃO”);
resp = in.next().charAt(0);
Character.toUpperCase(resp);
}

}while (resp == ‘S’);

obrigado!!!

1 curtida