zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    jquery的$.与$.fn的区别
    jquery加载页面的方法
    创业股权究竟如何分配--新浪创业训练营
    创业者要处理好的10大关系
    洪泰基金投资经理殷鹏:肯定不投的八类项目
    创业初期股权如何分配-------陈楠心血总结
    排序总结
    如何快速进入一门领域,学习新的知识
    虚拟机的设置
    华为大数据项目fusionInsight
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7348656.html
Copyright © 2011-2022 走看看