如何编写一个程序,显示一个数字是否为素数,并且可以在文件中显示1到100的素数

时间:2011-03-11 17:02:21

标签: c++ primes

我正在尝试编写一个程序,它会告诉您输入的编号是否为素数,并将所有素数从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 个答案:

答案 0 :(得分:3)

真的觉得你在想这个。你已经完成了编写isprime函数的困难部分。

显示数字是微不足道的,只需编写一个for循环来查看数字并检查哪些是素数,如果特定数字是素数,则将其打印到屏幕。

然后,只需在循环内添加写入文件,即可打印到屏幕上的数字。

答案 1 :(得分:1)

为什么不重用你的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;
}

答案 2 :(得分:1)

当你将所有素数从1打印到100时,你会为自己复杂化。退后一步,想想你想做什么;循环从1到100,打印数字,如果它的素数。

for (int i = 1; i <= 100; ++i) {
  if (isPrime(i))
  cout << i << endl;
}

答案 3 :(得分:0)

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之后的每个偶数都不是素数,只有奇数。