zoukankan      html  css  js  c++  java
  • 洛谷——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

    先求出最大公约数,可以考虑从最大公约数gcd 的约数里找次大公约数 

    从2枚举 遇到第一个 能被gcd整除的 就可以返回 与gcd/i了    意会一下~~~ 

     1 #include <algorithm>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 
     6 int ch,a,b;
     7 void read(int &x)
     8 {
     9     x=0;ch=getchar();
    10     for(;ch>'9'||ch<'0';) ch=getchar();
    11     for(;ch>='0'&&ch<='9';ch=getchar()) x=ch-'0'+x*10;
    12 }
    13 
    14 int GCD(int a,int b)
    15 {
    16     return !b?a:GCD(b,a%b);
    17 }
    18 int SGCD(int x)
    19 {
    20     for(int i=2;i*i<=x;i++)
    21         if(x%i==0) return x/i;
    22     return 1;
    23 }
    24 
    25 int main()
    26 {
    27     read(a); read(b);
    28     int gcd=GCD(a,b);
    29     if(gcd==1) printf("-1");
    30     else printf("%d",SGCD(gcd));
    31     return 0;
    32 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    AliSQL的编译使用
    linux下编译gcc6.2.0
    TransmitFile函数的简单使用
    C++11的简单线程池代码阅读
    TJpgDec使用说明
    TJpgDec—轻量级JPEG解码器
    PPM图片格式及其C读写代码
    linux下vmware的安装、物理分区使用及卸载
    visual stuido 跨解决方案调试
    Proj.4坐标系统创建参数
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7341563.html
Copyright © 2011-2022 走看看