2017-10-10 39 views
0

我基本上完成了这个,唯一的问题是,当它循环检查素数时,它打印出不在斐波那契数列中的素数。这里是我的代码:检查Fibonacci总理的数量

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

我试了一下,它不起作用,现在它打印一个数字或根本没有数字。它只在我们的输入之前打印数字(如果数字是素数和斐波那契) – 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循环你用

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

}

是在本地计数器pno这没有任何意义将检查。

您可以使用更好的方法来进一步优化您的程序,以查找数字是否为素数,因为它需要大量时间用于大型输入。