求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行的
[解决办法]
/*你的那个方法太慢了,应该用筛选法.最好保存到文件,否则屏幕太小装不下那一堆数.*/#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();}
[解决办法]
无聊,给你改造一下#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次。