zoukankan      html  css  js  c++  java
  • LOJ Finding LCM(math)

    1215 - Finding LCM

    Time Limit: 2 second(s)
    Memory Limit: 32 MB

    LCM is an abbreviation used for Least Common Multiple in Mathematics. We say LCM (a, b, c) = L if and only if L is the least integer which is divisible by a, b and c.

    You will be given a, b and L. You have to find c such that LCM (a, b, c) = L. If there are several solutions, print the one where c is as small as possible. If there is no solution, report so.

    Input

    Input starts with an integer T (≤ 325), denoting the number of test cases.

    Each case starts with a line containing three integers a b L (1 ≤ a, b ≤ 106, 1 ≤ L ≤ 1012).

    Output

    For each case, print the case number and the minimum possible value of c. If no solution is found, print 'impossible'.

    Sample Input

    3

    3 5 30

    209475 6992 77086800

    2 6 10

    Output for Sample Input

    Case 1: 2

    Case 2: 1

    Case 3: impossible

    题意:lcm(a,b,c)=L;现已知a,b,L的值,求是否存在c满足lcm(a,b,c)=L。

    ::首先求出a,b的最小公倍数m,则c必包含因子t=L/m;

    令g=gcd(c,m);

    假设c=t,c*m/g=L,当且仅当gcd(c,m)=1等式成立;

    如果gcd(c,m)>1;

    那么令(c*g)*(m/g)/gcd(c*g,m/g)=L;当且仅当gcd(c*g,m/g)=1;

    如果gcd(c*g,m/g)>1重复上述操作;

    例:a=2,b=3,L=12;

    则m=6,L=12,t=2;

    令c=t;判断gcd(6,2)==2,令c=c*2(==4),m=m/2(==3)

    gcd(c,m)==1,故c=4;

    代码:

       1: #include <iostream>
       2: #include <algorithm>
       3: #include <cstring>
       4: using namespace std;
       5: typedef long long ll;
       6:  
       7: ll gcd(ll a,ll b){
       8:     if(a<b) swap(a,b);
       9:     return b==0?a:gcd(b,a%b);
      10: }
      11:  
      12: ll lcm(ll a,ll b){
      13:     return a/gcd(a,b)*b;
      14: }
      15:  
      16: int run()
      17: {
      18:     ll a,b,cas=1,L,T;
      19:     cin>>T;
      20:     while(T--)
      21:     {
      22:         cin>>a>>b>>L;
      23:         ll m=lcm(a,b);
      24:         if(m>L||L%m!=0)
      25:         {
      26:             cout<<"Case "<<cas++<<": "<<"impossible"<<endl;
      27:             continue;
      28:         }
      29:         ll c=L/m,g;
      30:         if(c!=1)
      31:           while((g=gcd(m,c))!=1){
      32:               c*=g,m/=g;
      33:           }
      34:         cout<<"Case "<<cas++<<": "<<c<<endl;
      35:     }
      36:     return 0;
      37: }
      38:  
      39: int main()
      40: {
      41:     ios::sync_with_stdio(0);
      42:     return run();
      43: }
  • 相关阅读:
    使用Boost Regex 的regex_search进行遍历搜索
    最全的libcurl库资源整理
    curl的http上传文件代码
    boost::property_tree读取解析ini文件--推荐
    UrlDecode
    C++、VC++、MFC网页自动注册、登陆、发帖、留言,QQ注册、QQ申请器源码、注册邮箱源码、自动发帖源码
    DUILIB入门简明教程
    MFC/VC CxImage 简单配置与使用 (完整版)
    几款国产开源的Windows界面库
    C++文件读写详解(ofstream,ifstream,fstream)
  • 原文地址:https://www.cnblogs.com/zyx1314/p/3591135.html
Copyright © 2011-2022 走看看