读书人

求1到50000的素数解决方案

发布时间: 2012-02-17 17:50:41 作者: rapoo

求1到50000的素数
源代码如下:
[code=C/C++][/code]
#include <iostream>
#include <cmath>
using namespace std;

bool prime(unsigned i)
{
bool n = true;
unsigned tmp = sqrt(i);
unsigned j;
for(j = 2; j <= tmp; j++)
{
if (i % j == 0)
{
n = false;
break;
}
else
{
continue;
}
}
return n;

}

int main ()
{
unsigned n = 50000;
unsigned i;
cout << "The relsut are as following: " <<endl;
int p = 1;
for(i = 1; i <= n; ++i)
{
if(prime(i))
{
cout << i << " ";
//每5个打印一行
if(p == 5)
{
cout << endl;
p = 1;
}
else ++p;
}
}
return 0;
}

运行程序后,在控制台窗口的结果只有从33941到49999之间的素数,前面的1,2,3,5……怎么不见了?
是不是跟控制台窗口的大小有关?

[解决办法]
打开一个控制台,在任务栏上右键,选择属性,找到布局->屏幕缓冲区,写5000行,然后保存所有窗口都是这样。
以后再打开控制台缓冲区都那么多行了。
我一般都设置2000行的
[解决办法]

C/C++ code
/*你的那个方法太慢了,应该用筛选法.最好保存到文件,否则屏幕太小装不下那一堆数.*/#include <iostream>#include <fstream>using namespace std;const int LENGTH=500;bool Array[LENGTH]={false};int main(){    ofstream FILE("Result.txt",ios::app);    for (int i=2;i<=LENGTH;++i)    {        if (Array[i]==false)        {            cout<<i<<" ";            FILE<<i<<" ";            for (int j=i+i;j<=LENGTH;j+=i)//HERE!筛选法求素数!            {                Array[j]=true;            }        }    }    cout<<endl;    FILE<<endl;    FILE.close();}
[解决办法]
C/C++ code
无聊,给你改造一下#include   <iostream> #include   <cmath>   using   namespace   std; unsigned int primes[10000];int count =0;bool   isprime(unsigned  int i)   {        for(j=0; j< count ; j++)       {           if((i%primes[j])==0)           {                return false;           }           if(primes[j] * primes[j] >i) return false;      }      primes[j] = i;      j++;      return true;}   int   main   ()   {       for(unsigned int i=0; i < 50000; i ++)      {          if(isprime(i))          {               cout << "Prime " << count << " :" << i << endl;          }      }      return 0;         }
[解决办法]
to 11楼,
我是把i+i改成i*i,这两种写法的执行结果都一样,只是i*i比i+i少循环i-2次。

读书人网 >C++

热点推荐