Descobrir a soma quadrada dos numeros primos [INICIANTE]
27/03/2020
0
Olá, estou começando a programar em C/C++ e gostaria de ajuda num exercício. Sei que o erro está no while principal do programa e sei identificá-lo, mas não sei como resolver. O erro do programa está no modo 2, dentro do while principal. Aqui está o enunciado:
"Neste EP a sua tarefa será verificar se um número pode ser escrito como a soma de quadrados de quatro números primos consecutivos ou não. O programa terá dois modos de operação. No primeiro modo o programa receberá do usuário cinco números naturais n1, n2, n3, n4 e n e retornará a informação de se n pode ou não ser escrito como a soma dos quadrados de n1, n2, n3 e n4. No segundo modo o programa receberá do usuário um único número natural n e retornará os quatro primos consecutivos cuja soma dos quadrados seja igual a n ou a informação de que não é possível representar n como a soma dos quadrados de quatro primos consecutivos.
Seu programa deve ler do teclado o modo de operação, que será 1 ou 2. Caso o usuário digite 1, o programa deverá funcionar no primeiro modo de operação e nesse caso deverá ler do teclado os cinco números naturais n1, n2, n3, n4 e n e imprimir verdadeiro caso n seja igual à soma dos quadrados de n1, n2, n3, n4 ou falso caso contrário.
Caso o usuário digite 2 como sendo o modo de operação, seu programa deve funcionar no segundo modo de operação e nesse caso ele deve imprimir os quatro números primos consecutivos cuja soma dos quadrados seja igual ao número passado como entrada ou a mensagem falso caso isso não seja possível."
#include<stdio.h>
#include<stdlib.h>
int prim(int p) // Função para gera numeros primos. //
{
int i;
int divisores = 0;
for (i = 1; i < (p + 1); i++)
{
if (p % i == 0)
{
divisores++;
}
else
{
i++;
}
}
if (divisores > 2)
{
return 0;
}
else if (divisores == 2)
{
return 1;
}
}
int main()
{
int modo, n1, n2, n3, n4, n, nant;
printf("modo: ");
scanf("%d", &modo);
if (modo == 1) //Modo 1 do programa, que funciona corretamente. //
{
printf("n1: ");
scanf("%d", &n1);
printf("n2: ");
scanf("%d", &n2);
printf("n3: ");
scanf("%d", &n3);
printf("n4: ");
scanf("%d", &n4);
printf("n: ");
scanf("%d", &n);
if ((n1 * n1) + (n2 * n2) + (n3 * n3) + (n4 * n4) == n)
{
printf("verdadeiro");
}
else
{
printf("falso");
}
}
else if (modo == 2) //Modo 2 do programa. //
{
printf("n: ");
scanf("%d", &n);
n1 = 2;
n2 = 3;
n3 = 5;
n4 = 7;
nant = 1;
while ((n1 * n1) + (n2 * n2) + (n3 * n3) + (n4 * n4) < n) // Acredito que o erro esteja aqui. //
{
while (prim(n1) == 0 && n1 >= nant)
{
n1 += 1;
}
while (prim(n2) == 0 && n2 >= n1)
{
n2 += 1;
}
while (prim(n3) == 0 && n3 >= n2)
{
n3 += 1;
}
while (prim(n4) == 0 && n4 >= n3)
{
n4 += 1;
}
nant++;
}
if ((n1 * n1) + (n2 * n2) + (n3 * n3) + (n4 * n4) == n)
{
printf("%d %d %d %d", n1, n2, n3, n4);
}
else
{
printf("falso");
}
}
return 0;
}
"Neste EP a sua tarefa será verificar se um número pode ser escrito como a soma de quadrados de quatro números primos consecutivos ou não. O programa terá dois modos de operação. No primeiro modo o programa receberá do usuário cinco números naturais n1, n2, n3, n4 e n e retornará a informação de se n pode ou não ser escrito como a soma dos quadrados de n1, n2, n3 e n4. No segundo modo o programa receberá do usuário um único número natural n e retornará os quatro primos consecutivos cuja soma dos quadrados seja igual a n ou a informação de que não é possível representar n como a soma dos quadrados de quatro primos consecutivos.
Seu programa deve ler do teclado o modo de operação, que será 1 ou 2. Caso o usuário digite 1, o programa deverá funcionar no primeiro modo de operação e nesse caso deverá ler do teclado os cinco números naturais n1, n2, n3, n4 e n e imprimir verdadeiro caso n seja igual à soma dos quadrados de n1, n2, n3, n4 ou falso caso contrário.
Caso o usuário digite 2 como sendo o modo de operação, seu programa deve funcionar no segundo modo de operação e nesse caso ele deve imprimir os quatro números primos consecutivos cuja soma dos quadrados seja igual ao número passado como entrada ou a mensagem falso caso isso não seja possível."
#include<stdio.h>
#include<stdlib.h>
int prim(int p) // Função para gera numeros primos. //
{
int i;
int divisores = 0;
for (i = 1; i < (p + 1); i++)
{
if (p % i == 0)
{
divisores++;
}
else
{
i++;
}
}
if (divisores > 2)
{
return 0;
}
else if (divisores == 2)
{
return 1;
}
}
int main()
{
int modo, n1, n2, n3, n4, n, nant;
printf("modo: ");
scanf("%d", &modo);
if (modo == 1) //Modo 1 do programa, que funciona corretamente. //
{
printf("n1: ");
scanf("%d", &n1);
printf("n2: ");
scanf("%d", &n2);
printf("n3: ");
scanf("%d", &n3);
printf("n4: ");
scanf("%d", &n4);
printf("n: ");
scanf("%d", &n);
if ((n1 * n1) + (n2 * n2) + (n3 * n3) + (n4 * n4) == n)
{
printf("verdadeiro");
}
else
{
printf("falso");
}
}
else if (modo == 2) //Modo 2 do programa. //
{
printf("n: ");
scanf("%d", &n);
n1 = 2;
n2 = 3;
n3 = 5;
n4 = 7;
nant = 1;
while ((n1 * n1) + (n2 * n2) + (n3 * n3) + (n4 * n4) < n) // Acredito que o erro esteja aqui. //
{
while (prim(n1) == 0 && n1 >= nant)
{
n1 += 1;
}
while (prim(n2) == 0 && n2 >= n1)
{
n2 += 1;
}
while (prim(n3) == 0 && n3 >= n2)
{
n3 += 1;
}
while (prim(n4) == 0 && n4 >= n3)
{
n4 += 1;
}
nant++;
}
if ((n1 * n1) + (n2 * n2) + (n3 * n3) + (n4 * n4) == n)
{
printf("%d %d %d %d", n1, n2, n3, n4);
}
else
{
printf("falso");
}
}
return 0;
}
Thiago
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)