·整除
牛牛对整除非常感兴趣。牛牛的老师给他布置了一道题:牛牛的老师给出一个n,然后牛牛需要回答出能被1到n之间(包括1和n)所有整数整除的最小的数。牛牛犯了难,希望你能编程帮他解决这个问题。
首先解题思路就是:一个大于1的整数可以由多个质数相乘表示。这个其实很好理解,数无非是质数和合数,质数只能被1和自己除,而合数被除后最终也只会剩下质数。因此反过来,我们要求的相当于就是一个最小公倍数,我们只需要求出1~n中每个数的最小质数的个数,再相乘就可以解决了。
解题时可以运用数组,数组的下标就相当于1~n,存储的int就相当于个数,这样解决起来更加的方便。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
void Put(int n,int arr[20000])
{
int i;
int j;
for (i = 1; i <= n; i++)
{
int k = i;
for (j = 2; j*j <= n; j++)
{
int s = 0;
while (k%j == 0)
{
s++;
k = k / j;
}
arr[j] = max(arr[j], s);
}
if (k > 1)
{
arr[k] = max(arr[k], 1);
}
}
}
int main()
{
int n=0;
int arr[20000] = {0};
scanf("%d", &n);
Put(n, arr);
long long res = 1;
for (int j = 1; j <= n; j++)
{
if (arr[j] > 0)
{
for (int m = 1; m <= arr[j]; m++)
{
res = res*j%987654321;
}
}
}
printf("%lld", res);
system("pause");
return 0;
}