第二届c决赛-3-大整数

来源:互联网 发布:mamercache缓存php 编辑:程序博客网 时间:2024/05/22 01:40

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


程序:

#include <stdio.h> #include <string.h> #define N 105int n;int a[N][50];int b[N] = {0}; void multiple(){int i, j, k;memset(a, 0, sizeof(a));for (i = 3; i <= 100; i++){int temp; a[i][0] = 1;for(j = 2; j <= i; j++){int c = 0;for (k = 0; k < 50; k++){temp = a[i][k] * b[j] + c;a[i][k] = temp % 1000;c = temp / 1000;}}}}void printData(int n){int i, j, k;for (i = 49; i >= 0; i--){if (a[n][i])break;}printf("%d", a[n][i]);for (j = i - 1; j >= 0; j--)printf("%d", a[n][j]);}int main(int argc, char* argv[]){int i, j, k;for (i = 0; i < N; i++)b[i] = i;for (i = 2; i < N; i++){for (j = i + 1; j <= N; j++){if (b[j]%b[i] == 0)b[j] /= b[i];}}multiple();scanf("%d", &n);if(n == 1 || n ==2){printf("%d", n);}elseprintData(n);return 0;}

0 0
原创粉丝点击