您的位置:首页 > 其它

蓝桥杯 公倍数

2016-05-23 20:19 274 查看
3. 公倍数
 
为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。
但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。
事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。
 
我们希望寻找到能除尽1至n的的每个数字的最小整数。
 
不要小看这个数字,它可能十分大,比如n=100, 则该数为:
69720375229712477164533808935312303556800
 
请编写程序,实现对用户输入的 n (n<100)求出1~n的最小公倍数。
 
例如:
用户输入:
6
程序输出:
60
 
用户输入:
10
程序输出:
2520
 
要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;
不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。

[cpp] view
plain copy

#include <iostream>  

using namespace std;  

  

char res[1000];  

int isPrime[1000];  

  

int solve(int n);  

  

int main()  

{  

    int n;  

    cin>>n;  

    int t = solve(n);  

    for(int i=t; i>=0; i--)  

        cout<<(int)res[i];  

    cout<<endl;  

    return 0;  

}  

  

int solve(int n)  

{  

    for(int i=0; i<=n; i++)  

        isPrime[i] = 1;  

    isPrime[0] = isPrime[1] = 0;  

  

    int p = 0;  

    res[p++] = 1;  

  

    for(int i=2; i<=n; i++)  

    {  

        if(isPrime[i])  

        {  

            for(int j=i+1; j<=n; j++)  

                if(j%i==0)  

                    isPrime[j] = 0;  

  

            //求小于该数的质数的指数值,即t=2^n,求小于n的最大的t  

            //如n=6时,2为4,3为3, 5为5  

            //所以结果为4*3*5=60  

            int tmp = i;  

            while(tmp<=n) tmp*=i;  

            tmp /= i;  

  

            int o = 0;  

            for(int s=0; s<p; s++)  

            {  

                int t = res[s] * tmp + o;  

                o = t /10;  

                res[s] = t%10;  

            }  

            while(o>0)  

            {  

                res[p++] = o%10;  

                o /= 10;  

            }  

        }  

    }  

    return p-1;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: