2017-10-10 3 views
0

私は基本的にこれで終わっているが、唯一の問題は素数を調べるためにループするときでも、フィボナッチシーケンスに含まれていない素数をプリントアウトすることである。ここに私のコードは次のとおりです。Fibonacci Primeの金額を確認する

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

私はそのためpno++のを推測している、私は右ですか?

答えて

0

は、あなただけの最後の番号をチェックしているためです。この

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

私は試しても機能しませんが、今では1つの番号か全く番号を印刷しません。それは私たちの入力の前に番号を印刷します(数字が素数でフィボナッチの場合) – Ned

0

を試してみてください。生成するすべての番号を確認する必要があります。例えば関数を作成することを検討する。 is_primeと計算したすべてのファイバーナンシーを確認してください。 (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; 
} 

、すべての数のis_primeを呼び出して、あなたのメインループ:

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

関数を使わずにこれを行うことは可能ですか?なぜなら私は機能を使う場所を作ったからだ。ですから、関数を使わずにそうすることが可能かどうか疑問に思っています。 – Ned

+0

実際のプログラミングでは可能ですが、関数を使って解決することができます。 – vasek

0

これはあなたが達成しようとしているもののちょうどラフな試みです。

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

あなたは、最後のタームとそれだけを間違った方法でチェックしようとしていました。あなたは

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

}

を使用forループ ザ・はどんな意味がないローカルカウンタpnoにチェックを適用しました。

大きな入力に膨大な時間を要するため、より良い方法でプログラムを最適化することができます。

関連する問題