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

哪位大神稍微帮小弟我看一上,求素数 结果超时

2012-11-03 
哪位大神稍微帮我看一下,求素数 结果超时#include iostreamusing namespace stdint main(){int timesc

哪位大神稍微帮我看一下,求素数 结果超时
#include <iostream>
using namespace std;

int main()
{
  int times;
  cin>>times;
  for(int i=0;i<times;++i){
  int p,q;
  cin>>p;
  cin>>q;
  int sum=0;
  if(p<=2){sum++;}
   
  for(int j=(p%2==0?(p+1):p);j<=q;){
  bool bl=1;
   
  for(int h=3;h*h<=j;h+=2){
  if(j%h==0) {
  bl=0;
  break;
  }
  }
  if(bl&&j>2){
  sum++;
  j+=2;
  }else{++j;}
  }
   
  cout<<sum<<endl;
  }
  system("pause");
  return 0;
}
 


[解决办法]
比较快的素数算法一搜一大把,随便贴一个好了.

C/C++ code
#include <iostream>#include <windows.h>using namespace std;unsigned int prime(unsigned int lmax){    bool* prime_num = new bool[lmax];    memset(prime_num, true, sizeof(bool) * lmax);    for (unsigned int i = 2; i < lmax; ++i)    {        if (prime_num[i])            for (unsigned int j = 2; i * j < lmax; ++j)                prime_num[i * j] = false;    }    unsigned int pnum = 0;    for (unsigned int i = 2; i < lmax; ++i)    {        if (prime_num[i])            ++pnum;    }    delete[] prime_num;    return pnum;}int main(){    int a = 1000000000;    DWORD s = GetTickCount();    unsigned int pnum = prime(1000000000);    float use_time = ((float)(GetTickCount() - s)) / 1000.f;    cout<<"1000000000 以内有素数个数 : "<<pnum<<endl;    cout<<"用时 : "<<use_time<<"秒"<<endl;    return 0;} 

热点排行