C語言:互質


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

 

 

 質數與互質概念不是同一個,質數指的是一個數僅有1和它自己本身可以被整除;而互質則指的是兩個數只有1是共同的因數,有些人可能會將兩者混為一談。本篇文章是以互質為主題,接下來以互質作為主要內容,不過不得不說,這兩者的核心都是一樣的,采取歐幾里得算法(又叫輾轉相除法),通常用gcd表示,歐幾里得算法應用范圍非常廣泛,在今后的blog中我會專門寫一篇文章來講歐幾里得算法。

言歸正傳,這道題有多行測試數據,因此我們可以用while語句作為循環,考慮到會超時,於是我打算用自定義函數:

被除數a和除數b相除取余數c,將余數c給除數b,除數b給被除數a,以此往復,直到直到b為0,作為結束的標志。

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

以下是完整代碼:

 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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM