原题链接:最多约数问题
#include <stdio.h>
#include <malloc.h>
int main(void) {
int N = 5e6 + 10;
int *n = (int *)calloc(N, sizeof(int));
int *p = (int *)calloc(N, sizeof(int));
int *d = (int *)calloc(N, sizeof(int));
int i = 0, j = 0, a = 0, b = 0, max = 1, t = 0;
scanf("%d %d", &a, &b);
for (i = 2; i <= b; ++i) {
if (!p[i]) {
n[t++] = i;
p[i] = 2;
d[i] = 2;
}
for (j = 0; j<t&&i*n[j]<=b; ++j) {
p[i*n[j]] = 2;
d[i*n[j]] = d[i]*2;
if (0 == i%n[j]) { //此时的n[j]就是质因数分离法中的分离的第一项中的底数,也就是一个质数
p[i*n[j]] = p[i]+1;
d[i*n[j]] = d[i]/p[i]*p[i*n[j]];
break;
}
}
if (i >= a) {
max = max>d[i]?max:d[i];
}
}
printf("%d\n", max);
free(p);
free(n);
free(d);
return 0;
}
4.7 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复