// 25用筛选法求1-1000之内的素数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int main()
{
int i, k, a[1001];
for (i = 2; i <= 1000; i++) a[i] = 1;
float s = sqrt(float(1000));
for(i = 2; i <= s; i++)
if (a[i] == 1)
{
k = 2 * i;
while (k <= 1000)
{
a[k] = 0;
k = k + 1;
}
}
for (i = 2; i <= 1000; i++)
if (a[i] == 1)
cout << setw(5) << i;
}
代码修改如下,供参考:
// 25用筛选法求1-1000之内的素数.cpp : 此文件包含 "main" 函数。
//程序执行将在此处开始并结束。
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int main()
{
int i, k, a[1001]={0}; //修改
//for (i = 2; i <= 1000; i++) a[i] = 1;
int s = (int)sqrt(1000.0);//float s = sqrt(float(1000));
for(i = 2; i <= s; i++)
{
for(k = 2;k*i < 1001; k++)//if (a[i] == 1)
a[i*k] = 1; //{
//k = 2 * i;
//while (k <= 1000)
//{
//a[k] = 0;
//k = k + 1;
//}
}
for (i = 2; i <= 1000; i++)
if (a[i] == 0) //if (a[i] == 1)
cout << setw(5) << i;
return 0;
}
#include
#include
using namespace std;
bool isprime(int);
int main()
{
for (int i = 2; i <= 1000; i++)
{
if (isprime(i))
cout << " " << i;
}
}
bool isprime(int k)
{
float m;
m = sqrt(float(k));
for(int i = 2; i<=m; i++ )
{
if (k % i == 0)
return false;
}
return true;
}
int main()
{
int i, k, a[1001];
a[0] = a[1] = 0; // 基本的,0, 1 都不是素数
// 从 2 到 1000,假设他们都是素数
for (i = 2; i <= 1000; i++) a[i] = 1;
float s = sqrt(float(1000));
// 以倍数法进行筛选,即从既有数中删除2的倍数、3的倍数、5的倍数,直到最大数的平方根的倍数为止。
for(i = 2; i <= s; i++)
if (a[i] == 1)
{
k = 2 * i;
while (k <= 1000)
{
a[k] = 0;
// k = k + 1; // 应该是错在这句。k+1肯定不形成倍数,而 k + i 则形成倍数。
k = k + i;
}
}
// 输出筛选所得的素数
for (i = 2; i <= 1000; i++)
if (a[i] == 1)
cout << setw(5) << i;
return 0;
}