问题
解决方法
m和n是第m个和第n个的意思。接下来开始操作
#include <stdio.h>
#include <math.h>
void getprime(int m, int n);
int main() {
int m, n;
scanf("%d%d", &m, &n);
getprime(m, n);
return 0;
}
void getprime(const int m, const int n) {
int count = 0;
int num[n + 1];
for (int k = 0; k < n + 1; ++k) {
num[k]=0;
}
for (int i = 2; ; i += 1) {
int a = 0;
for (int j = 2; j <= sqrt(i); ++j) {
if (i % j == 0) {
a++;
}
}
if (a == 0) {
count++;
if (m <= count && count <= n) {
num[count] = i;
}
}
if (count > n) {
break;
}
}
int ten = 0, len = n - m + 1;
for (int i = m; i <= n; ++i) {
ten++;
if (ten % 10 == 0) {
printf("%d\n", num[i]);
} else {
if (ten == len) {
printf("%d", num[i]);
} else {
printf("%d ", num[i]);
}
}
}
}
总结
刚开始老是第4个测试点错误。
起初不知道是什么原因。后来想想的我的判断。
for (int i = 2; i < 10000; i += 1) {
int a = 0;
for (int j = 2; j <= sqrt(i); ++j) {
if (i % j == 0) {
a++;
}
}
没错,我一开始是这样写的,一开始就错了,我错把第104个素数当成了范围是104。