读书人

哪位大神稍微帮小弟我看一上求素数

发布时间: 2012-11-03 10:57:43 作者: rapoo

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

读书人网 >C++

热点推荐