最小公倍数pluse

题目描述

  • 求出1至N的每个数字的最小公倍数

示例

  • 输入:6, 10, 100
  • 输出:60, 2520, 69720375229712477164533808935312303556800

解答

#include <iostream>

using namespace std;

/* ******************************************************************************
  函 数 名		:  multiplication
  功能描述		:  记录输出倒序结果
  输入参数		:  num:输出倒序结果,length:数据长度,n:质数(或其x次方)因子
  输出参数		:  None
  返 回 值		:  None
****************************************************************************** */
int multiplication(int *num, int length, int n)
{
    // 返回数据长度length;
    long int c = 0; // 进位
    int i;
    // 对数据的length-1位进行相乘、进位
    for (i = 0; i < length; i++) {
        int m = num[i] * n + c;
        c = m / 10;
        num[i] = m % 10;
    }
    // 对数据的length及其以上位进行进位
    while (c) {
        num[i] = c % 10;
        i++;
        c = c / 10;
    }
    return i;
}
int main()
{
    int N;
    while (cin >> N) {
        int prime[22]={ 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101 };
        int num[100];
        int length = 1;
        num[0] = 1;
        int m;
        for (m = 64; N < m; m = m / 2) // 100以内,质数2的最大指数值
            ;
        length = multiplication(num, length, m);
        for (m = 81; N < m; m = m / 3) // 100以内,质数3的最大指数值
            ;
        length = multiplication(num, length, m);
        for (m = 25; N < m; m = m / 5) // 100以内,质数5的最大指数值
            ;
        length = multiplication(num, length, m);
        for (m = 49; N < m; m = m / 7) // 100以内,质数7的最大指数值
            ;
        length = multiplication(num, length, m);
        for (int i = 0; N > prime[i]; i++) {
            length = multiplication(num, length, prime[i]); // 10以外的质数
        }
        for (int i = length - 1; i >= 0; i--) {
            cout << num[i];
        }
        cout << endl;
    }
    return 0;
}
posted @ 2020-11-03 11:42  _Fusion  阅读(274)  评论(0)    收藏  举报