一個關於素數的性質

一 寫在前面

1.1 本文內容

一個關於素數的性質。算法

 

二 素數性質

性質:全部大於等於5的素數必定和6的倍數相鄰!此性質能夠被證實,證實方法能夠去搜索相關資料。下面給出1000之內的素數,你能夠驗證一下看是否是這樣。spa

 

有了這個性質,下面再給出一個其在質因數分解中的實際應用例子。題目連接在此。題目大意是給定一個正整數N,要求將其分解成多個質因數相乘的形式。須要注意的是質因數分解的經常使用算法是試除法,例子中使用的也是試除法。而且每個合數都可以寫成幾個質因數相乘的形式。code

 質因數分解:http://oj.noi.cn/oj/#main/show/1170blog

 

 

上述題目的一個可行代碼以下:get

 1 #include <stdio.h>
 2 #include <stdbool.h>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     //freopen("in.txt", "r", stdin);
 7     int n, step;
 8     bool first = true;
 9 
10     scanf("%d", &n);
11 
12     /* 將數n中包含的2, 3, 5這三個質因數給除去 */
13     while (n % 2 == 0)
14     {
15         (first == true) ? printf("2") : printf("*2");
16         first = false;
17         n /= 2;
18     }
19     while (n % 3 == 0)
20     {
21         (first == true) ? printf("3") : printf("*3");
22         first = false;
23         n /= 3;
24     }
25     while (n % 5 == 0)
26     {
27         (first == true) ? printf("5") : printf("*5");
28         first = false;
29         n /= 5;
30     }
31 
32     /* 讓step從6開始,考察step相鄰的兩個數,若是能整除n,則將其除去 */
33     step = 6;
34     while (n >= (step-1))
35     {
36         if (n % (step-1) == 0)
37         {
38             (first == true) ? printf("%d", step-1) : printf("*%d", step-1);
39             first = false;
40             n /= (step-1);
41         }
42         else if (n % (step+1) == 0)
43         {
44             (first == true) ? printf("%d", step+1) : printf("*%d", step+1);
45             first = false;
46             n /= (step+1);
47         }
48         else
49         {
50             step += 6;
51         }
52     }
53 
54     putchar('\n');
55     //fclose(stdin);
56     return 0;
57 }
相關文章
相關標籤/搜索