C语言 用筛法求1-1000之间的素数

作者&投稿:韶详 (若有异议请与网页底部的电邮联系)
用筛法求1-1000之间的素数~

筛选法的规律:(以1~1000内的素数少选为例)
我们知道素数的定义:只能被1和他本身整除的是素数,那这样看的话,只要有一个既不是1又不是这个数本身的数把这个数整除了,就可以说明这个数不是素数了。例如
5是素数,因为5只能被5和1整除,6不是素数,,因为6除了能被1和6整除,还能被2和3整除。试想一下,我们要判断6是不是素数,需不需要循环到6的时候才进行判断呢,不需要,因为2和3都是他的因子,我们在循环到2的时候,找到2的所有倍数,如4,6,8,10,12等等,这些数都至少有2这个因子,因此可以判定它们都不是素数了。而由于4是2的倍数,在循环到2的时候已经判定4不是素数了,所以我们不需要在挖掉4的倍数了,直接跳过4,来到5,挖掉5的所有倍数,然后是6,6在值钱是2的倍数被挖掉了,所以跳过6,来到7.....一直循环到最后一个数字为止,这个时候就是上面7步中说的,剩下没有被挖掉的(挖掉的含义就是把这个数置0)也就是非0的数字就是素数了。
不知道我说的你能不能听懂。希望对你有帮助吧。

先建立一个数组赋值为2-100
再用二重循环标记每个素数的倍数为0,最后打印出为被标记不为0的数即为素数

#include "stdio.h"
#define Size 99
int main()
{
int a[Size],i,j;
for(i=0;i<Size;i++)
a[i]=i+2;

for(i=0;i<Size;i++)
{
if(a[i])
{
for(j=i+1;j<Size;j++)
if(a[j]%a[i]==0)
a[j]=0;
}
}
for(i=0;i<Size;i++)
if(a[i]!=0)
printf("%d",a[i]);
printf("
");
return 0;
}
结果

1、写我们的头文件和主函数。写好我们的开头。

2、编写定义变量,我们语言定义一个i来用于后面的for循环。

3、输入一个数,在那之前我们要有一个printf()提示一下,显得程序有调理。

4、利用for循环看一看从2到n-1是否能被n整除,如果能就要break。

5、判断素数,如果程序正常结束,就i>=n,说明他就是素数。

6、如果通过break结束,他就会i<n,所以他就不是素数。



#include <iostream>
using namespace std;
int main()
{
int pre[1002],i,k;
for(i=1;i<1000;i++)pre[i]=i;//填充数字
pre[1]=0;
for(i=1;i<1000;i++)
{
if(pre[i]!=0)//是否被挖
for(k=2;i*k<1000;k++)pre[i*k]=0;//倍数置零
}
for(i=1;i<1000;i++)if(pre[i])cout<<pre[i]<<" ";//输出
return 0;
}

筛选法的规律:(以1~1000内的素数少选为例)
我们知道素数的定义:只能被1和他本身整除的是素数,那这样看的话,只要有一个既不是1又不是这个数本身的数把这个数整除了,就可以说明这个数不是素数了。例如 5是素数,因为5只能被5和1整除,6不是素数,,因为6除了能被1和6整除,还能被2和3整除。试想一下,我们要判断6是不是素数,需不需要循环到6的时候才进行判断呢,不需要,因为2和3都是他的因子,我们在循环到2的时候,找到2的所有倍数,如4,6,8,10,12等等,这些数都至少有2这个因子,因此可以判定它们都不是素数了。而由于4是2的倍数,在循环到2的时候已经判定4不是素数了,所以我们不需要在挖掉4的倍数了,直接跳过4,来到5,挖掉5的所有倍数,然后是6,6在值钱是2的倍数被挖掉了,所以跳过6,来到7.....一直循环到最后一个数字为止,这个时候就是上面7步中说的,剩下没有被挖掉的(挖掉的含义就是把这个数置0)也就是非0的数字就是素数了。
不知道我说的你能不能听懂。希望对你有帮助吧。
#include <stdio.h>
int main()
{
int prime[1002],i,j;
for(i=2;i<1000;i++)
prime[i]=i;//将数组填满1~1000的数字,由于1不是素数,因此我们跳过1,从2开始填
for(i=1;i<1000;i++)
{
if(prime[i]!=0)//是 否已经置0,像4,6,8,10,12等这些数字,在挖2的倍数的时候已经被置零了,所以我们跳过这些数字
for(j=2;i*j<1000;j++)
prime[i*j]=0;//挖掉
}
for(i=1;i<1000;i++)
if(prime[i]!=0)
printf("%d ",prime[i]);//最后非0的数字输出
return 0;
}


新昌县19376333195: C语言 用筛法求1 - 1000之间的素数利用数组放1000个数挖掉第一个数1(令该数=0)2没被挖掉,挖掉后面所有2的倍数3没被挖掉,挖掉后面所有3的倍数4... -
端木珍迈甘:[答案] 筛选法的规律:(以1~1000内的素数少选为例)我们知道素数的定义:只能被1和他本身整除的是素数,那这样看的话,只要有一个既不是1又不是这个数本身的数把这个数整除了,就可以说明这个数不是素数了.例如 5是素数,因为5只...

新昌县19376333195: C语言 用筛法求1~1000之间的素数. -
端木珍迈甘: 1) 利用数组存放这1000个数; 2) 挖掉第一个数1(令该数=0); 3) 2没被挖掉,挖掉后面所有2的倍数; 4) 3没被挖掉,挖掉后面所有3的倍数; 5) 4被挖掉,不执行任何操作; 6) 5没被挖掉,挖掉后面所有5的倍数; 7) ····直到最后一个数; 8) 剩下的非0数就是素数. !!!!!!!!!!!! 谢谢采纳!!!!!!!!!!!!!!!!!!!!!!

新昌县19376333195: C语言编程:用筛选法将1到1000之间的素数打印出来. -
端木珍迈甘: 我用java你自己改这下:for(int i=1;i<=1000;i++) { for(int j=2;j<=7;j++){ if(j!=4 or j!=6){ if(i%j != 0){ system.out.println(i);//打印素数 } } } }

新昌县19376333195: 用筛法求2到1000之间的所有素数.求用C语言的详细写法. -
端木珍迈甘: main() { int i,j; for(i=2;i

新昌县19376333195: C语言高手,帮帮忙,十分感谢!编写程序用筛选法求一百之内的素数,每行输出十个 -
端木珍迈甘: #include<stdio.h> #include<math.h> int main(void) {int num[100];int i,j,N;for(i=0;i<100;i++)/*初始化数表*/num[i]=i+1;num[0]=0;N=10;/*10是100开平方得来的*/for(j=1;;){/*j记录当前所使用的素数*/for(i=num[j]*(num[j]-1);i<1000;i++){if(num[i]...

新昌县19376333195: c语言 用筛选法求100以内的素数 -
端木珍迈甘: #include<stdio.h> main() {int k,i;printf("100以内的素数是:");for(k=1;k<=100;k++){for(i=2;i<k/2;i++){if(k%i==0)break;}if(i<k/2)printf("%d\t",k);} } 写的不是很好,因为我只是一个大一的学生.大概就是这样的,现在的我是天津工业大学的学生,就这样....

新昌县19376333195: c语言程序编写:求100到200以内的素数(用筛法求解) -
端木珍迈甘: main() { int i,j; for(i=2;i<=1000;i++) { for(j=2;j<=i-1;j++) if(i%j==0) break; if(i==j) printf("%d",i); } }好了,这个答案我已经用过n次了都,以后这样的简单的小题自己做做吧

新昌县19376333195: 2、设计程序实现:借助数组,用“筛选法”求出1000之内的素数 ――要求能显示在C - free软件上 -
端木珍迈甘: #include "stdio.h" int main(int argc,char *argv[]){ int i,j; char m[1001];//声明char型数组作为筛选对象 for(m[0]=m[1]=0,i=2;i<=1000;m[i++]=1);//m[0]和m[1]赋0,其余赋1备选 i=2;//考察次数2~33,用期间的素数去除大于i且小于等于1000间不为0...

新昌县19376333195: 求1000以内最大的20个素数之和. C语言编程 怎么做 -
端木珍迈甘: #include "stdio.h" int isprime(int n)//判断n是否是素数,是,返回1,不是返回0 {int i;for(i=2;i<=n/2;i++)if(n%i==0)return 0;return 1; } int main() {int sum=0,count=0,i;for(i=1000;i>2;i--)if(isprime(i)==1){//1000以内最大素数,那就从1000开...

新昌县19376333195: C语言,找1到1000的素数怎么做呢 -
端木珍迈甘: #include<stdio.h> int main() {char num[1001];int i,n;memset(num,0x00,sizeof(num));for(n=2;n<32;n++)for(i=2;i*n<1001;i++)num[i*n]=1;printf("1到1000素数为:\n");for(i=2;i<1001;i++)if(num[i]==0)printf("%d\n",i);return 0; } 大概和素数表对照了一下,最后几个数是对的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网