线性计算给定两个自然数的最大公因子,最小公倍数和最小自然数比

来源:互联网 发布:淘宝卖食品要什么条件 编辑:程序博客网 时间:2024/06/12 01:36

#include <iostream>
#include "time.h"
#include "math.h"
using namespace std;

void calculation(int64_t m1, int64_t m2)
{
    string e="there is not common factor between them";
    int64_t larger_number; int64_t less_number;
    int64_t k1 = 0; int64_t k2 = 0;

    if(m1 == m2) throw e;
    else
    {
        if(m1 > m2)
        {
            larger_number = m1; less_number = m2;
        }
        else
        {
            larger_number = m2; less_number = m1;
        }
        int64_t n = (larger_number>>1) + 1;
        if(n < less_number) n = less_number;
        int64_t s = 1;
        for(int64_t k = 0; k < n; k++)
        {
            if(s <= m1)
            {
                s = s + m2; k1++;
            }
            if(s > m1)
            {
                s = s - m1; k2++;
            }
            if(s == 1)
            {
                cout<< "The integer retio is "<< k1<<" : "<<k2<<endl; // 打印最小自然数比
                cout<< "The loops are "<<(k+1)<<endl;
                cout<< "the greatest common number is "<< (m1/k1)<<endl; // 打印最大公因子
                cout<< "The minimum common multiple is "<< (m1*k2)<<endl; // 打印最小公倍数
                break;
            }
        }
        if(s != 1) throw e;
    }
}

int main()
{
    int64_t number_1 = 45;
    int64_t number_2 = 100;

    cout<< "given two numbers are "<< number_1<<", "<<number_2<<endl;   // 打印给定的两个自然数
    if(!number_1 || !number_2){cout<< "Each number must be greater than zero "<<endl; return 0;} // 检查数据类型

    try{ calculation(number_1, number_2);}
    catch(string e)
    {
        cout<<e<<endl;
        cout<<"\n"<< "The minimum common multiple is "<< (number_1*number_2)<<endl;// 打印最小公倍数,当两数不存在公因子时

    }

    return 0;
}

 

代码为C++ ;时间复杂性为 Θ(c)TO(n)。想知道怎么来的,当评论到达20个将公布。


 

0 0