链接
https://www.luogu.org/problem/show?pid=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
用最大公约数除以最小的公共质因子
#include<cstdio> #include<algorithm> using namespace std; int gcd(int a,int b) { if(b==0)return a; else return gcd(b,a%b); } int main() { int a,b; scanf("%d%d",&a,&b); int gc_d=gcd(a,b); if(gc_d==1) { puts("-1");return 0; } int t=min(a,b),tt=a+b-t; int minn=1; for(int i=2;i*i<=t;i++) if(t%i==0&&tt%i==0) { minn=i;break; } if(minn==1) { puts("1");return 0; } printf("%d ",gc_d/minn); return 0; }