nyist 517 最小公倍数

为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。
但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。
事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。

我们希望寻找到能除尽1至n的的每个数字的最小整数m.
输入
多组测试数据(少于500组)。
每行只有一个数n(1<=n<=100).
输出
输出相应的m。
样例输入
2
3
4
样例输出
2
6
12


这题一看简单 其实不简单 是个大数问题
我们首先需要把我们要用的素数进行打表
然后将我们的最小公倍数进行打表处理,

由于我们的n最大只有100 而数据大于100 这样我们就要把我们1 -- 100 的数全部进行打表 后面进行查询输出就可以了 这样会省一些时间

#include <stdio.h>
#include <string.h>
#include <math.h>

int prime[105];//素数表
int a[105];//最小公倍数
int b[105][100];

void prime_judge(int prm[])//打素数表
{
    int i = 0;
    int j = 0;
    prime[1] = 0;
    for(i = 2; i < 106; i++)
    {
        for(j = i*i; j < 106; j+=i)
            prime[j] = 1;
    }
    int k = 1;

}

void judge()
{
    int i = 1;
    int j = 0;
    int k = 2;
    for(i = 0; i < 106; i++)
        a[i] = 1;

    for(i = 2; i < 106;i++)
        {
            int x = i;

            for(j = i; j > 1;)
            {
                int t = 0;
                if(prime[j]==0)
                {
                    if(x%j ==0)
                    {

                        while(x%j==0)
                        {
                            t++;
                            x = x/j;
                        }

                        int w = 0;
                        int wk = 0;
                        for(w = 1 ; w < k; w++)
                            if(a[w] == j)
                                wk++;

                        if((t - wk) ==0 || t < wk)
                            a[k] *= 1;
                        else
                            a[k] *= pow(j,t-wk);
                    }
                }
             j--;
            }

            k++;
        }
}

void print()
{
    memset(b,0,sizeof(b));

    int k =0;
    for(k = 1; k < 106; k++)
        b[k][1] = 1;

    int i = 1, j = 0;

    for(i = 1; i < 103; i++)
    {

        for(j = 1; j <= i; j++)
            {
                int w = 1;
                int t = 0;
                int t1 = 0;
                int www = 1;
                while(www < 100)
                {

                    t1 = b[i][w]*a[j] +t;
                    b[i][w] = ( t1) % 10;
                    t = t1 / 10;
                   w++;
                   www++;
                }


            }

    }
}
int main()
{
    int i = 0;
    prime_judge(prime);
    judge();
    print();
    int n;
    while(scanf("%d",&n) != EOF)
    {
        int flag = 0;
        for(i = 100; i > 0; i--)
            if(b[n][i] || flag)
            {
                printf("%d",b[n][i]);
                flag = 1;
            }

        printf("\n");
    }
    return 0;
}

 

你可能感兴趣的:(T)