首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求1到50000的素数解决方案

2012-02-17 
求1到50000的素数源代码如下:[codeC/C++][/code]#include iostream#include cmathusing namespace st

求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次。

热点排行