- 2
- 0
- 约5.72千字
- 约 12页
- 2021-11-04 发布于湖北
- 举报
代码:
[cpp] view plaincopyprint?
1. // 转载请标明出处,原文地址:
/hackbuteer1/article/details/8017703
2. bool IsPrime( int n)
3. {
4. int i;
5. if(n 2)
6. return false;
7. else if(2 == n)
8. return true;
9. if((n1) == 0) //n%2 == 0
10. return false;
11. for(i = 3 ; i*i = n ; i += 2) // 只考虑奇数
12. {
13. if(n % i == 0)
14. return false;
15. }
16. return true;
17. }
18.
19. /*
20. 考虑到所有大于 4 的质数,被 6 除的余数只能是 1 或者 5
21. 比如接下来的 5,7,11,13,17,19 都满足
22.
23. 所以,我们可以特殊化先判断 2 和 3
24. 但后面的问题就出现了,因为并非简单的递增,从 5 开始是 +2,+4,+2,+4, 这样递增的
25. 这样的话,循环应该怎么写呢?
26.
27. 首先,我们定义一个步长变量 step ,循环大概是这样 for (i = 5; i = s; i += step)
28. 那么,就是每次循环,让 step 从 2 变 4,或者从 4 变 2
29. 于是,可以这么写:
30. */
31. bool IsPrime2( int n)
32. {
33. int i, step = 4;
34. if(n 2)
35. return false;
36. else if(2 == n || 3 == n)
37. return true;
38. if((n1) == 0) //n%2 == 0
39. return false;
40. if(n%3 == 0) //n%3 == 0
41. return false;
42. for(i = 5 ; i*i = n ; i += step)
43. {
44. if(n % i == 0)
45. return false;
46. step ^= 6;
47. }
48. return true;
49. }
50.
51. void print_prime( int n)
52. {
53. int i , num = 0;
54.
55. for(i = 0 ; ; ++i)
56. {
57. if(IsPrime2(i))
58. {
59.
原创力文档

文档评论(0)