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

哪位大神稍微帮我看一下,求素数 结果超时
#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;
}