2017-10-10 1 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++의 추측하고있어 내가 바로, AM : 여기 내 코드는?

답변

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

나는 그것을 시도하고 그것이 작동하지 않는다, 지금 그것은 하나의 번호 또는 전혀 번호를 인쇄합니다. 그것은 단지 우리의 입력 전에 번호를 인쇄합니다 (숫자가 소수 일 경우 피보나치) – Ned

0

이것은보십시오. 생성하는 모든 번호를 확인해야합니다. 예를 들어 함수 만들기를 고려하십시오. is_prime을 입력하고 계산 한 모든 fibonnaci 번호를 확인하십시오. (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에 체크를 적용했다

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

}을 사용했다.

큰 입력에 많은 시간이 걸리므로 더 좋은 방법으로 프로그램을 최적화 할 수 있습니다.