Как я могу заставить мою программу выйти из цикла for, когда он достигает 10000? C

#c #function #primes #fibonacci

#c #функция #простые числа #фибоначчи

Вопрос:

 for (int x = 3; x <= 10000; x  )
    {
        int f = fibonacci(x);
        if (isPrime(f))
        {
            cout << setw(2) << nCounter << setw(18) << f << endl;
            nCounter  ;
        }
    }
    cout << "Enter any character to quit: ";
    cin.get();
  

Как следует из названия, я застрял, пытаясь найти подходящий способ выхода из цикла for, но также правильно использовать свои функции. Я пробовал делать while (f <= 10000) и несколько других методов, но ответы всегда разные.

Программа предназначена для выполнения последовательности Фибоначчи и проверяет, являются ли числа в последовательности «простым» числом, пока Фибоначчи не достигнет 10000 или еще чего-то.

В настоящее время, когда он запускается, он просто продолжается, пока не достигнет большого отрицательного числа.

Я НЕ МОГУ ИСПОЛЬЗОВАТЬ ВЕКТОРЫ

весь код:

 #include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

bool isPrime(long long n);
long long fibonacci(int n);

int main()
{
    double nCounter = 1;
    cout << "Fibonacci Primes by Luke" << endl;
    cout << endl;
    cout << setw(2) << "n" << setw(18) << "Fibonacci Prime" << endl;
    cout << "==" << setw(18) << "===============" << endl;
    
    for (int x = 3; x <= 10000; x  )
    {
        int f = fibonacci(x);
        if (isPrime(f))
        {
            cout << setw(2) << nCounter << setw(18) << f << endl;
            nCounter  ;
        }
    }
    cout << "Enter any character to quit: ";
    cin.get();
}

bool isPrime(long long n)
{
    for (int i = 2; i < n; i  )
    {
        if (n % i == 0)
            return false;
    }
    return true;
}

long long fibonacci(int n)
{
    if (n <= 1)
        return n;

    return fibonacci(n - 1)   fibonacci(n - 2);
}
  

вот время, которое я пытался использовать, но long long fibonaci всегда возвращает ‘2’ и создает бесконечный цикл.

 int x = 3;
    long long f;
    while (f <= 10000)

        int f = fibonacci(x);
    if (isPrime(f))
    {
        cout << setw(2) << nCounter << setw(18) << f << endl;
        nCounter  ;
    }
  

Комментарии:

1. Вы уверены, что хотите вычислить 10000 чисел Фибоначчи? Эти числа очень большие и не поместятся в int .

2. Я уверен, что вы совершенно неправильно прочитали свое домашнее задание. Вас не просят вычислить первые 10000 чисел Фибоначчи. Вас попросят вычислить все числа Фибоначчи до 10000. Это две совершенно разные вещи.

3. Я обновил свой пост со всем кодом. Меня просят вычислить все простые числа Фибоначчи до 10000, и программа работает, но не завершается при попадании.

4.Ваш while (f <= 10000) , кажется, правильный подход, но вы должны использовать его правильно (например, объявить f вне и перед циклом и присвоить ему начальное значение <10000).

5. вы всегда можете добавить строку типа if (f > 10000) break; .. возможно, это не лучшее решение, хотя

Ответ №1:

Одним из способов было бы проверять условие на каждой итерации и прерывать цикл, когда f он превышает 10000

 for (int x = 3; x <= 10000; x  )
    {
        int f = fibonacci(x);
        
        if(f > 10000)
            break;
            
        if (isPrime(f))
        {
            cout << setw(2) << nCounter << setw(18) << f << endl;
            nCounter  ;
        }
}
  

Вы также можете сделать это, преобразовав его в цикл while, но для этого вам нужно объявить и инициализировать f и x вне цикла.

     int x = 3;
    int f = fibonacci(x);
    while(f <= 10000)
    {
        if (isPrime(f))
        {
            cout << setw(2) << nCounter << setw(18) << f << endl;
            nCounter  ;
        }
        x  ;
    }