Вывести все простые числа Фибоначчи (вместе с их номерами), меньшие x - C (СИ)
Формулировка задачи:
Здравствуйте! Я начинающий, учусь на первом курсе. Дали задание, не могу решить. Помогите, пожалуйста.
Ввести число x. Вывести все простые числа Фибоначчи (вместе с их номерами), меньшие x.
Написал алгоритм. Как его теперь закончить? И есть ли ошибки?
#include <stdio.h>
int main()
{
int x;
scanf ("%d", &x);
int a=0;
int b=1;
int c=0;
int d=2;
int e=0;
while (c<=x)
{
c=b+a;
a=b;
b=c;
while (d<c)
{
e=c%d;
if (e=0)
{
d=d+1;
}
if (e>0)
}
}
return 0;
}
Знаю, что тема уже давно избита, но все-таки найти ответы не могу(
Решение задачи: «Вывести все простые числа Фибоначчи (вместе с их номерами), меньшие x»
textual
Листинг программы
/*
============================================================================
Name : c_fibonacci_prime.c
Author : UranFlex
Version : 0.1 alpha
Licanse : Free for All
Copyright : UranFlex 2013
Description : Ввести число x. Вывести все простые числа Фибоначчи (вместе с их номерами), меньшие x.
* C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
// функция возвращает число Фибоначчи номер n, работает как для положительных, так и для отрицательных n
int Fibonacci( int n );
// функция определяет является ли число простым
int IsPrime( int x );
// функция печатает все простые числа Фибоначчи, которые меньше заданного x
void PrintPrimeFibLowX( int x );
int main( void ) {
int x;
printf( "Введите число X " );
scanf( "%d", &x );
PrintPrimeFibLowX( x );
return EXIT_SUCCESS;
}
int Fibonacci( int n ) {
int fib = 0; // F( n )
int i; // счетчик цикла
int n1 = 1; // F( n + 1 ) или F( n - 1 )
if ( n > 0 ) { // для положительных номеров F( n ) = F( n - 2 ) + F( n - 1 )
if ( n <= 2 )
return 1;
int n2 = 1; // F( n - 2 )
for ( i = 3; i <= n; ++i ) {
fib = n2 + n1;
n2 = n1;
n1 = fib;
}
} else if ( n < 0 ) { // для отрицательных номеров F( n ) = F( n + 2 ) - F( n + 1 )
if ( n == -1 )
return 1;
int n2 = 0; // F( n + 2 )
for ( i = -2; i >= n; --i ) {
fib = n2 - n1;
n2 = n1;
n1 = fib;
}
} else if ( n == 0 ) // для нуля
return fib;
return fib;
}
int IsPrime( int x ) {
// проверка - все простые числа могут быть только натуральными числа и больше 1
if ( x <= 1 )
return 0;
int i = 2;
// проверяем в цикле делится ли число x на какие-либо числа от 2 до корень из x
while ( i * i <= x ) {
if ( x % i == 0 ) // если делитель найден, то число непростое
return 0;
++i;
}
return 1; // если делитель не найден, то число простое.
}
void PrintPrimeFibLowX( int x ) {
if ( x <= 2 ) { // простых чисел меньших #3 ЧФ не существует
printf( "Простых чисел Фибоначчи меньших %d не существует !", x );
return;
} else {
printf( "Простые числа Фибоначчи меньшие %d:\n", x );
// счетчик ЧФ, начинаем проверку с ЧФ #3 ( равным 2 )
int counter = 3; // так как оно является наименьшим простым числом
while ( 1 ) { // в бесконечном цикле
int currFib = Fibonacci( counter ); // находим очередное ЧФ
if ( currFib >= x ) // проверяем, что оно меньше заданного x
break; // если нет, то обрываем цикл
if ( IsPrime( currFib ) ) // если оно простое,
printf( "#%d = %d\n", counter, currFib ); // то печатаем его номер и значение
++counter; // увеличивая счетчик переходим к следующему ЧФ
}
}
}