前言
素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。
思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2):判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。
原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之间有无因子即可。
思路1实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <stdio.h> int main() { int n; printf ( "请输入一个1-100之间的整数:\n" ); scanf ( "%d" , &n); int m = 0; for ( int i = 2; i < n; i++ ) { if (n % i == 0) { m++; } } if (m == 0) { printf ( "%d是素数\n" , n); } else { printf ( "%d不是素数\n" , n); } return 0; } |
思路2实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <stdio.h> #include <math.h> int main() { int n; printf ( "请输入一个1-100之间的整数:\n" ); scanf ( "%d" , &n); int i = 0; int q = sqrt (n); for (i = 2; i <= q; i++ ) { if (n % i == 0) { break ; } } if (i > q) { printf ( "%d是素数\n" , n); } else { printf ( "%d不是素数\n" , n); } return 0; } |
《C与指针》4.14 - 2:
打印1~100之间所有质数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <stdio.h> int main() { int num, divisor; printf ( "1, 2" ); for (num = 3; num <= 100; num += 2) { for (divisor = 3; divisor < num; divisor +=2 ) { if (num % divisor == 0) { break ; } } if (divisor >= num) { printf ( ", %d" , num); } } printf ( "\n" ); return 0; } |
结果:
1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
补充:判断素数的4种方法实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#include<stdio.h> #include<math.h> //方法一:从1-n挨个判断; bool isPrimel_1( int n) { for ( int i=2;i<n;i++) if (n%i==0) return false ; return true ; } //方法二: 将被判断数n,进行开方作为判断结束的条件, //因为开方后的数,是n的最大因子,最大因子之后的数对判断该数是否是素数没有意义。 bool isPrimel_2( int n) { for ( int i=2;i< sqrt (n);i++) if (n%i==0) return false ; return true ; } //方法三: 只需要判断到该数的一半即可,如果超过它本身的一半, //进行求余的结果将永远不会为0,除非是该数对该数的求余。 bool isPrimel_3( int n) { int i; if (n%2==0) return 0; for (i=3;i=n/2;i+=2){ if (n%i==0) return 0; return 1; } } //方法四:从3-n,只判断奇数,先对一个数进行奇偶判断,若是奇数, //只对从3到它本身的奇数进行求余计算,同理若是偶数,一定不是素数。 bool isPrimel_4( int n) { int i,j=1; if (n%2==0) return 0; else { for (i=3;i<=n;i=i+2){ if (n%i==0) j=i; break ; } } if (j==n) return 0; return 1; } int main() { int n; printf ( "请输入一个数:" ); scanf ( "%d" ,&n); printf ( "%d,%d,%d,%d\n" ,isPrimel_1(n),isPrimel_2(n),isPrimel_3(n),isPrimel_4(n)); return 0; } |
总结
到此这篇关于C语言中判断素数(求素数)的文章就介绍到这了,更多相关C语言判断素数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!