Descobrir a soma quadrada dos numeros primos [INICIANTE]

27/03/2020

0

C# C C++

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;
}


Thiago

Thiago

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar