luogu U10783 名字被和谐了

链接

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;
}
原文地址:https://www.cnblogs.com/sssy/p/7341662.html