#include<stdio.h>
#include<math.h>
int main()
{
int i,n,j,count=0;
scanf("%d",&n);
for(i=n-1;i>1;i--)
{
for(j=i;j>=(int)sqrt(i*1.0);j--)
{
if(i%j==0) break;
else
if(j<(int)sqrt(i*1.0))
count++;
printf("%d\t",i);
if(count%5==0) printf("\n");
}
}
return 0;
}
有问题。
for (j = i; j >= (int)sqrt(i * 1.0); j--)
{
if (i % j == 0) break;
既然 j 的初始值是 i, 那么 (i % j)就会是 0, 你循环里面的其他语句都没有用。
建议一步一步来:
1) 你先做好这个功能: 判断一个数是否是质数
2) 把 1 - n 的所有质数 都打出来
3)然后再考虑 5 个一组。
楼上说得很对,本蒟蒻给出代码:
#include <stdio.h>
int isprime(int x) { // 判断 x 是否为质数
if (x < 2) {
return 0;
}
int i = 2;
for (; i * i <= x; ++i) {
if (x % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n, sum = 0, i = 1; scanf("%d", &n);
for (; i <= n; ++i) {
if (isprime(i)) {
printf("%d ", i);
if ((++sum) % 5 == 0) {
printf("\n");
}
}
}
return 0;
}