艾特商业网

17是质数吗(1是质数吗)

更新时间:2023-11-15 11:00:26

导读 你们好,最近小艾特发现有诸多的小伙伴们对于17是质数吗,1是质数吗这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。1、

你们好,最近小艾特发现有诸多的小伙伴们对于17是质数吗,1是质数吗这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、1. 先明白什么是质数/素数

2、素数又称为质数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫躲何川做质数

3、2. 编程实现:判断一个数是否为质数/素数

4、明白了什么是质数/素数后,我们就要思考如何编程实现其核心算法

5、最简单的是遍历法: 即遍历1到其本身,如果除了1和它本身外(2 - n-1),如果每个数都不能被他整除的话,那么就说明这个数是素数

6、int i, n=7, flag = 0;

7、for (i = 2; i < n; i++)

8、{

9、if (n % i == 0)

10、{

11、flag++;

12、}

13、}

14、if (flag == 0)

15、{

16、printf("%d是质数/素数", n);//表示是素数

17、}

18、else{

19、printf("%d不是质数/素数", n);//表示不是素数

20、}

21、3. 完整可运行代码

22、#include <stdio.h>

23、int main()

24、{

25、int i, n=7, flag = 0;

26、for (i = 2; i < n; i++)

27、{

28、if (n % i == 0)

29、{

30、flag++;

31、}

32、}

33、if (flag == 0)

34、{

35、printf("%d是质暗宿数/素数", n);//表示是素数

36、}

37、else{

38、printf("%d不是质数/素数", n);//表示不是素数

39、}

40、printf("\n");

41、return 0;

42、}

43、4. 程序执行结果

44、请输入一个数:5

45、5是质数/素数

46、请输入一个数:15

47、15不是质数/素数

48、请输入一个数:19

49、19是质数/素数

50、请输入一个数:20

51、20不是质数/素数

52、5. 逻辑优化

53、对一个判读一个数m,

54、上面我们遍历时是直接判断到m-1的,其实判断方法还可以简化。

55、m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ sqrt(m) 之间的每一个整数去除就可以了。

56、如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。

57、例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。

58、原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m) ,另一个大于或等于sqrt(m) 。

59、例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=sqrt(16),因此只需判定在 2~4 之间有无因子即可。

60、代码调整:

61、 #include <math.h> //先引入库文件

62、 for (i = 2; i < n; i++) //然后这里i < n 可以改成i<=sqrt(n)

63、6. 优化后的执行结果仍然无误

64、请输入一个数:2

65、2是质数/素数

66、请输入一个数:45

67、45不是质数/素数

68、请输入一个数:5

69、5是质数/素数

70、请输入一个数:15

71、15不是质数/素数

72、请输入一个数:7

73、7是质数/素数

74、请输入一个数:17

75、17是质数/素数

76、请输入一个数:9

77、9不是质数/素数

78、7. 最后我们扩展下:求101到200之间的素数

79、#include <stdio.h>

80、#include <stdlib.h>

81、#include <string.h>

82、/*

83、判断101到200之间的素数

84、 素数:“素数是指质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数

85、 思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。

86、

87、 思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ sqrt(m) 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ 间任一沟阅整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。

88、

89、 原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m) ,另一个大于或等于sqrt(m) 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=sqrt(16),因此只需判定在 2~4 之间有无因子即可。

90、

91、

92、*/

93、void main()

94、{

95、int n,i,j,flag=0,sum=0;

96、printf("素数:");

97、for(i=101;i<=200;i++){

98、flag=0;

99、for(j=2;j<i;j++){ //这里j<i可以改成<=sqrt(i)

100、if(i%j==0) {

101、flag=1;

102、}

103、}

104、if(flag==0){

105、sum++; //表示是素数

106、printf("%d,",i);

107、}

108、}

109、printf("\n共有素数%d个\n",sum);

110、}

111、8.求101到200之间的素数/质数执行结果

112、素数:101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,

113、共有素数21个

以上就是1是质数吗这篇文章的一些介绍,希望对大家有所帮助。

免责声明:本文由用户上传,如有侵权请联系删除!