【刷题】求出一定范围内的素数

什么是素数?

“素数”又称作“质素”,是指大于1的自然数,除了1与其自身外,不能被其它自然数整除的数,被称为素数(质素)。

如何求出n以内的素数?

这里总结出两种方法,并以这两种方法做讲解。分别是“筛选法”与“试除法”。

①筛选法:

用筛选法求n以内的素数。筛选法求解过程为:将2-n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0,以此类推,直到n为止。数组中不为0的数即为素数。

②试除法:

判断某个数是不是素数,就用它与它之前所有的整数逐个进行整除一遍,如果没有能够被它整除的数,那么它就是素数。
比如:判断7是不是素数,用7整除1–6这六个数,结果这六个数都不能被7整除,那么7就是素数。

两种方法的具体实现

方法一:筛选法

//方法一:筛选法
#include 
int main()
{int n = 0;	//输入范围int arr[101];printf("筛选法-----\n");printf("请输入范围:");scanf("%d",&n);printf("素数:");for (int i = 2; i <= n; i++){            arr[i] = i;     //从2开始包括到n为止的数都存进数组里面//列举出所有的除数for (int j = 2; j <= n; j++){for (int k = j+1; k <= n; k++){if (arr[k]%j == 0)  //如果余数是0,说明被整除(不是素数)。{arr[k] = 0; //之所以置0,就是为了把素数留下。}    }                }}//打印输出素数for (int i = 2; i <= n; i++){if (arr[i] != 0){printf("%d " ,arr[i]);}}printf("\n");return 0;
}

运行结果:
在这里插入图片描述

方法二:试除法

方法二:试除法
#include 
int main()
{int n = 0;int i = 0;int j = 0;printf("试除法-----\n");printf("请输入范围:");scanf("%d",&n);printf("素数:");//判断i是否为素数for (i = 2; i <= n; i++){/*用i把i到i-1的数看看能不能进行整除,如果能整除,则说明这个数不是素数那么就来到if判断*/for (j = 2; j < i; j++){if (i%j == 0){break;}                }if (j == i)		//说明已经试除到最后一个数,还未能被整除,就说明是素数。{printf("%d ",j);	//打印输出素数}}printf("\n");  return 0;
}

运行结果:
在这里插入图片描述

总结:

看到这里,想必对这两种方法已经有了自己的认识。“试除法”中间不用把数值先存起来,节省了一定的空间,同时也没有那么耗时。
这是我了解到的两种方法,如有不对的地方,还望大家多多指点。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部