64,637
社区成员
发帖
与我相关
我的任务
分享
int main()
{
int first[101] = {0}; //数组中存放待测数组
int second[101] = {0}; //存放检测后的数字
for (int i = 0; i < 99; ++i)
{
first[i] = i + 2; // 初始化待测数组
}
int *s = first; /* 待测数字源,把数组赋给指针,数组一中的为待测数字,经过一次排除*/
int *d = second; /* 把可能是素数的数组放入数组二,下次循环把数组二作为数字源*/
for (int times = 0; times < 100 ; ++ times) // 最多可能循环100次
{
cout << *s << endl;
int beg = *s; /* 数组中的第一个数字作为基础因子,不是因子倍数的放入目标数组,下次循环*/
int *p = s; /* 每次循环都已经去掉了更小的因子,所以,因子的倍数只可能是待测数组中的一员
// p指向可能的倍数*/
int *pt = s+1; // 指向待测数字
int i = 0; /*// 指明被检测过且可能是素数的数字放到目标数组的位置*/
while ((beg * (*p) < 101) || (*pt != 0))
{
if (*pt != beg * (*p))
{
d[i] = *pt;
++i;
++ pt;
}else{
++ pt;
++ p;
}
}
d[i] = 0; // 指明有效数字结尾,
if (*d == 0) // 如果目标数组为空,检测结束
{
break;
}
int* temp = s; // 本次的目标数组将是下次循环中的源数组
s = d;
d = temp;
}
system("pause");
}
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
for(int i=0;i<100;a[i]=i,i++);
for(int i=2;i<50;i++)
{
for(int j=2;j<50;j++)
if(i*j<100)
a[i*j]=0;
}
for(int i=1;i<100;i++)
if (a[i]!=0)
cout<<a[i]<<" ";
return 0;
}
#include <iostream>
using namespace std;
//求0~SIZE之间的素数
const int SIZE = 101;
bool prime[SIZE];
int main()
{
int i, j;
memset(prime, 0, sizeof(prime));
for(i=2;i<SIZE;i++)
{
if(!prime[i])
{
j = 2;
while(i*j < SIZE)
{
//素数的倍数不是素数
prime[i*j] = true;
j++;
}
}
}
for(i=2;i<SIZE;i++)
if(!prime[i])
cout << i << "\t";
cout << endl;
return 0;
}
for(i=1,n=0;i<=100;i+)
{
if(a[i]!=0)
{
printf("%3d",a[i]);
n++;
}
}
//....
//简单的,利用数组,
//a[1]...a[100],置为1.2....100.特意不用a[0]
for(i=1;n<=100;i++)
a[i]=i;
a[1]=0; //先去掉。
for(i=2;i<sqrt(100);i++) //注意,这里也是用筛选法,到sqrt(100)。
for(j=i+1;j<=100;j++)
{
if(a[i]!=0 && a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0; //把非素数置为0,下面,只要 if(a[i]!=0),就输出它。
}
for(i=1,n=0;i<=100;i+)
{
if(a[i]!=0)
printf("%3d",a[i]);
n++;
}
//然后,是对一些输出格式的控制,省略了....