蓝桥杯 求自然数序列的最小公倍数
2013-06-16 16:49
253 查看
问题描述:
为什么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
#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;
}
为什么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
#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;
}
相关文章推荐
- 蓝桥杯 求自然数序列的最小公倍数
- 蓝桥杯 算法训练 5-1最小公倍数 JAVA
- 蓝桥杯最大最小公倍数
- JAVA中求最小公倍数的几个算法(做蓝桥杯往年习题时的一些收获)
- 蓝桥杯 ALGO-148 算法训练 5-1最小公倍数
- 蓝桥杯 ALGO-2:最大最小公倍数
- [蓝桥杯]算法训练 最大最小公倍数
- 蓝桥杯 历届试题 核桃的数量 (最小公倍数)
- 2011 第二届蓝桥杯总决赛- 第三题 求1-n 的最小公倍数(n小于101)
- 蓝桥杯 ALGO-148 算法训练 5-1最小公倍数
- 【蓝桥杯】最大的最小公倍数
- 蓝桥杯 5-1最小公倍数
- 蓝桥杯 核桃的数量 (三个数以上的最小公倍数)
- 蓝桥杯:算法训练之最大最小公倍数
- 2016蓝桥杯历届试题——核桃的数量(最小公倍数)
- 蓝桥杯-算法训练2 最大最小公倍数
- 蓝桥杯-最大最小公倍数
- 蓝桥杯练习系统算法训练——最小公倍数
- 蓝桥杯 核桃的数量(最小公倍数)
- 蓝桥杯 算法训练 5-1最小公倍数