U10783 名字被和諧了


U10783 名字被和諧了

題目背景

眾所周知,我們稱g是a的約數,當且僅當g是正數且a mod g = 0。

眾所周知,若g既是a的約數也是b的約數,我們稱g是a、b的一個公約數。

眾所周知,a、b最大的那個公約數就叫最大公約數。

題目描述

現在對於給定的兩個正整數a、b,你需要求出它們次大的公約數(second greatest common divisor)。

輸入輸出格式

輸入格式:

 

第一行兩個正整數數a、b。

 

輸出格式:

 

第一行一個數,表示a、b的次大公約數。若a、b的公約數只有一個,則輸出-1。

 

輸入輸出樣例

輸入樣例#1:
2 3
輸出樣例#1:
-1

說明

測試點1..4:a、b≤10^5

測試點1..10:1≤a、b≤10^9

分析

可以證明,a,b的所有公約數都被組大公約數所包含,都是最大公約數的因數,所以先求出最大公約數,然后在最大公約數中在找次大公約數。

code

 1 #include<cstdio>
 2 #include<algorithm>
 3 
 4 using namespace std;
 5 
 6 int Gcd(int x,int y)
 7 {
 8     if (y==0) return x;
 9     return Gcd(y,x%y);
10 }
11 
12 bool Isprime(int x)
13 {
14     for (int i=2; i*i<=x; ++i)
15     {
16         if (x%i==0) return false;
17     }
18     return true;
19 }
20 
21 int main()
22 {
23     int d,x,y;
24     scanf("%d%d",&x,&y);
25     d = Gcd(x,y);
26 
27     if (d==1)
28     {
29         printf("-1");
30         return 0;
31     }
32     if (Isprime(d))
33     {
34         printf("1");
35         return 0;
36     }
37     for (int i=2; ; ++i)
38     {
39         if (d%i==0) 
40         {
41             printf("%d",d/i);
42             return 0;        
43         }
44     }
45     return 0;
46 }

 


免責聲明!

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



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