入力として 2 つの整数 (m と n) を取り、それらの間のすべての素数をファイルに書き込むプログラムを作成しました。出力をきれいに見せたかったので、field-width 修飾子を使用して各数値を 7 スペース幅で出力し、1 行あたり 10 だけ出力しました。出力は、最初の行を除いて予想どおりで、9 つの数字のみが出力されます。
コードは次のとおりです。
#include <stdio.h>
#include <math.h>
#define SIZE 100000000
char primes[SIZE];
void seive(void)
{
int i, j;
primes[1] = primes[0] = 1;
for (i=3;i<=sqrt(SIZE);i+=2)
if (primes[i] == 1)
continue;
else
for (j=i*i;j<SIZE;j+=2*i)
primes[j] = 1;
}
int main()
{
int n, m, count;
FILE *fp;
fp = fopen("test.txt", "w");
seive();
scanf("%d %d", &m, &n);
count = 0;
if (m <= 2) {
fprintf(fp, "%7d ", 2);
count++;
}
if (!(m & 1))
m++;
for (m;m<=n;m+=2) {
if (!primes[m]) {
count++;
if (count == 10) {
fprintf(fp, "\n");
count = 0;
}
fprintf(fp, "%7d ", m);
}
}
return 0;
}
これは、入力 1 300 の出力です。
2 3 5 7 11 13 17 19 23
29 31 37 41 43 47 53 59 61 67
71 73 79 83 89 97 101 103 107 109
113 127 131 137 139 149 151 157 163 167
173 179 181 191 193 197 199 211 223 227
229 233 239 241 251 257 263 269 271 277
281 283 293
ご覧のとおり、最初の行には 9 つの数字しか表示されていませんが、その後は正常に表示されています。私は困惑しています。前もって感謝します。