C語言:互質

今天遇到一道奇怪的程序題,和日常的不一樣。一樣都是互質,可是通常的題目都是判斷兩個數字是否互質,但這道題則是給定一個數字n,要求輸出全部小於等於n的與n互質的數,題目已經在下面給出:算法

 

 

 質數與互質概念不是同一個,質數指的是一個數僅有1和它本身自己能夠被整除;而互質則指的是兩個數只有1是共同的因數,有些人可能會將二者混爲一談。本篇文章是以互質爲主題,接下來以互質做爲主要內容,不過不得不說,這二者的核心都是同樣的,採起歐幾里得算法(又叫展轉相除法),一般用gcd表示,歐幾里得算法應用範圍很是普遍,在從此的blog中我會專門寫一篇文章來說歐幾里得算法。函數

言歸正傳,這道題有多行測試數據,所以咱們能夠用while語句做爲循環,考慮到會超時,因而我打算用自定義函數:測試

被除數a和除數b相除取餘數c,將餘數c給除數b,除數b給被除數a,以此往復,直到直到b爲0,做爲結束的標誌。spa

本題考察的是自定義函數,其中歐幾里得算法很是重要。code

如下是完整代碼:blog

 1 #include <stdio.h>
 2     int Gcd(int m,int n)
 3     {
 4         int o;
 5         while(n>0)
 6         {
 7             o=m%n;
 8             m=n;
 9             n=o;
10         }
11         return m;
12     }
13     int main()
14     {
15         int a,i,b,s;
16         while(scanf("%d",&a)!=EOF)
17         {
18             if(a==1)
19             {
20                 printf("1\n");
21             }
22             else{
23             s=0;
24             for(i=1;i<a;i++)
25             {
26                 b=Gcd(i,a);
27                 if(b==1)
28                 {
29                     s++;
30                 }
31             }
32             printf("%d\n",s);
33         }
34         }
35     return 0;
36     }
相關文章
相關標籤/搜索