2017-10-10 6 views
0

Je suis fondamentalement fait avec cela, le seul problème est quand il boucle pour vérifier le nombre premier, il imprime les nombres premiers qui ne sont pas dans la séquence de Fibonacci. Voici mon code:Vérifiez Fibonacci Prime dans la quantité de termes

int main() 
{ 
    int no1,no2,newno,pno,i,terms,j; 
    no1 = 0; 
    no2 = 1; 


    printf("**Fibonacci and Prime Numbers**\n\n"); 
    printf("Enter number of terms: \n"); 
    scanf("%d", &terms); 

    printf("\nAmong the first %d terms of Fibonacci series that are also prime number: \n", terms); 

    for(i=0; i<terms; i++){ 
    if(i<=no2){ 
     newno = i; 
    } 
    else{ 
     newno = no1+no2; 
     no1 = no2; 
     no2 = newno; 
    } 
    } 

    for(pno=2;pno<=newno;pno++){ 
    for(j=2;j<=pno;j++){ 
     if(pno%j==0){ 
      break; 
     } 
    } 
    if(pno==j){ 
     printf("%d \n", pno); 
    } 
    } 


    getch(); 
    return 0; 
} 

Je devine que sa cause de la pno++, je suis d'accord?

Répondre

0

Essayez cette

for(i=0; i<terms; i++){ 

newno = no1+no2; 
no1 = no2; 
no2 = newno; 

for(j=2;j<=newno;j++){ 
    if(newno%j==0){ 
     break; 
    } 
} 
if(newno==j){ 
    printf("%d prime\n", newno); 
} 
} 
+0

Je l'ai essayé et cela ne fonctionne pas, maintenant il imprime un nombre ou pas de numéro du tout. Il imprime uniquement le nombre exactement avant notre entrée (si le nombre est un premier et Fibonacci) – Ned

0

Ceci est parce que vous ne vérifie que le dernier numéro. Vous devriez vérifier chaque nombre que vous générez. Envisagez de créer une fonction, par ex. is_prime et vérifiez chaque numéro de fibonnaci que vous avez calculé. Résultat pourrait ressembler à ceci (extrait de C - how to test easily if it is prime-number?)

int is_prime(int num) 
{ 
    if (num <= 1) return 0; 
    if (num % 2 == 0 && num > 2) return 0; 
    for(int i = 3; i < num/2; i+= 2) 
    { 
     if (num % i == 0) 
      return 0; 
    } 
    return 1; 
} 

Et votre boucle principale qui appelle is_prime pour chaque numéro:

for (i = 0; i<terms; i++) { 
    if (i <= no2) { 
     newno = i; 
    } 
    else { 
     newno = no1 + no2; 
     no1 = no2; 
     no2 = newno; 

     if (is_prime(newno)) { 
      printf("%d\n", newno); 
     } 
    } 
} 
+0

Est-il possible de le faire sans utiliser une fonction? Parce que j'en ai fait un où j'utilise la fonction et ça marche. Je me demande donc s'il est possible de le faire sans utiliser de fonction. – Ned

+0

Bien sûr que c'est possible, mais dans la programmation de la vie réelle, vous le résoudriez en utilisant une fonction. – vasek

0

Ceci est juste un essai approximatif de ce que vous essayez d'atteindre.

#include<stdio.h> 

int main() 
{ 
int no1,no2,newno,pno,i,terms,j; 
no1 = 0; 
no2 = 1; 


printf("**Fibonacci and Prime Numbers**\n\n"); 
printf("Enter number of terms: \n"); 
scanf("%d", &terms); 

printf("\nAmong the first %d terms of Fibonacci series that are also prime number: \n", terms); 

for(i=0; i<terms; i++) 
{ 

     newno = no1+no2; 
     no1 = no2; 
     no2 = newno; 

    for(pno = 2; pno <= newno ;pno++) 
    { 

     if(pno == newno) 
     printf("%d\n",newno); 
     if(newno%pno == 0) 
     break; 
    } 

    } 
return 0; 
    } 

Vous essayiez seulement de vérifier le dernier terme et cela de façon incorrecte. La boucle que vous avez utilisé

for(pno=2;pno<=newno;pno++){ 
for(j=2;j<=pno;j++){ 
    if(pno%j==0){ 
     break; 
    } 
} 
if(pno==j){ 
    printf("%d \n", pno); 
} 

}

postulait contrôle sur compteur local pno qui ne fait pas de sens.

Vous pouvez optimiser davantage votre programme en utilisant un meilleur moyen de déterminer si un nombre est prioritaire car cela prendra beaucoup de temps pour les grandes entrées.