Как написать программу, которая показывает, является ли число простым и может ли отображать простые числа от 1 до 100 в файле - PullRequest
0 голосов
/ 11 марта 2011

Я пытаюсь написать программу, которая сообщит вам, является ли введенный номер простым или нет, запишет все простые числа от 1 до 100 в файл и отобразит числа.Это то, что у меня есть, но я потерялся.

bool isPrime(int);

int _tmain(int argc, _TCHAR* argv[])
{
    int num, answer, choice, i, numb=1;

    do
    {
        cout<< "Enter a number and I will tell you if it is prime or not."<<endl;
        cin>> num;

        if (isPrime(num))
            cout<<num<<" is a prime number."<<endl;
        else 
            cout<<num<< " is not a prime number."<<endl;

        cout<<"Would you like the first 100 prime numbers displayed? (1 for yes and 2 for no)"<<endl;
        cin>>choice;

        if (choice == 1)
        {
            while(numb<=100)
            { 
                i=2; 

                while(i<=numb)
                { 
                    if(num%i==0)
                        break;

                    i++;
                }

                if(i==num)
                    cout<<numb<<" is Prime"<<endl;

                numb++;
            }
        }
        else
        {
            cout<<"Would you like to run the program again? (1 for yes and 2 for no)"<<endl;
            cin>>answer;

            if (answer == 2)
            {
                exit(0);
            }
        }
        while (answer == 1);
    }

    system("pause");

    return 0;
}

bool isPrime (int number)
{
    int i;

    for (i=2; i<number; i++)
    {
        if (number % i == 0)
        {
            return false;
        }
    }

    return true;    
}

Ответы [ 4 ]

3 голосов
/ 11 марта 2011

Действительно чувствую, что вы слишком обдумываете это. Вы выполнили сложную часть, которая писала функцию isprime.

Отображение чисел тривиально, просто напишите цикл for, чтобы пройти через числа и проверить, какие числа простые, если конкретное число простое, то выведите его на экран.

Затем просто добавьте запись в файл внутри цикла для тех чисел, которые вы выводите на экран.

1 голос
/ 11 марта 2011

Когда вы печатаете все простые числа от 1 до 100, вы слишком усложняете свои задачи. Сделайте шаг назад и подумайте, что вы хотите сделать;цикл от 1 до 100, выведите число, если оно простое.

for (int i = 1; i <= 100; ++i) {
  if (isPrime(i))
  cout << i << endl;
}
1 голос
/ 11 марта 2011

Почему бы просто не использовать повторно isPrime ()?

cout<<"Would you like the first 100 prime numbers displayed? (1 for yes and 2 for no) <<endl;

cin>>choice;

for (i=2; i < 100; i++)
{
  if (isPrime(i)) cout << i << endl;
}
0 голосов
/ 11 марта 2011

Ключевое слово while вашего цикла do-while находится не на той строке.Это должно следовать за закрывающей скобкой.Компилятор сказал около строки 56 примера кода, который вы опубликовали.

После внесения изменений в соответствии со стандартом C ++ я скомпилировал и запустил программу.Я выбрал опцию для перечисления всех простых чисел до 100. Он щедрый и отображает все числа, простые или нет (подсказка: четные числа после 2 не являются простыми).

В начале я вставил следующие строки:

#include <iostream>
using namespace std;

Я изменил основную функцию с _tmain на main, так как я не использую компилятор Visual Studio.Аналогично аргументы тоже:

int main(int argc, char * argv[])

Кстати, если вы не передаете параметры в вашу программу, вы можете упростить объявление main до:

int main(void)

Вотмодификация для ускорения вашего простого детектора:

bool isPrime (int number)
{
    int i;

    if (number == 2)
    {
        return true;
    }
    if ((number % 2) == 0)
    {
        return false;
    }
    for (i = 3; i < number; i += 2)
    {
        if (number % i == 0)
        {
            return false;
        }
    }

    return true;    
}

Это сокращает количество проверок вдвое, потому что каждое четное число после 2 не является простым, только нечетные числа.

...