Вывести все простые числа Фибоначчи (вместе с их номерами), меньшие 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; // увеличивая счетчик переходим к следующему ЧФ } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д