I, too, have a problem with PRIME1 - I am quite sure that my program runs fine but there's something wrong with output. Take a look at the code:
#include <stdio.h>
#include <math.h>
unsigned long primes[20000];
int pc = 0;
void primeHigh(unsigned long a, unsigned long b);
void generatePrimes();
void primeHigh(unsigned long a, unsigned long b)
{
unsigned long i;
int j, flag = 1;
int initial = 1;
if (b <= 32000)
{
j = 0;
while(primes[j] < a) j++;
while(primes[j] <= b && j < pc)
{
if (initial)
{
printf("%ld", primes[j++]);
initial = 0;
}
else
printf("\n%ld", primes[j++]);
}
}
else if (a < 32000 && b > 32000)
{
primeHigh(a, 32000);
primeHigh(32000, b);
}
else
{
for(i = a; i <= b; i++)
{
if (!(i % 2)) continue;
else
{
for (j = 0; (j < pc) && (primes[j] * primes[j] <= i); j++)
{
if (!(i % primes[j]))
{
flag = 0;
break;
}
}
if (flag)
{
if (initial)
{
printf("%ld", i);
initial = 0;
}
else
printf("\n%ld", i);
}
else
flag = 1;
}
}
}
}
void generatePrimes()
{
unsigned long i, j, flag = 1;
primes[pc++] = 2;
for (i = 3; i <= 32000; i++)
{
for (j = 0; (j < pc) && (primes[j] * primes[j] <= i); j++)
{
if (!(i % primes[j]))
{
flag = 0;
break;
}
}
if (flag)
primes[pc++] = i;
else
flag = 1;
}
}
int main()
{
int t; /* ile jest testow */
unsigned long mn[20]; /* granice gora dol - parzyste dolne, nieparzyste gorne*/
unsigned long i;
/*** init ***/
scanf("%d", &t);
for (i = 0; i < t; i++)
scanf("%ld %ld", &(mn[2 * i]), &(mn[(2 * i) + 1]));
generatePrimes();
/*** main loop ***/
for (i = 0; i < t; i++)
{
primeHigh(mn[2 * i], mn[(2 * i) + 1]);
if (i != t - 1)
printf("\n\n");
}
return 0;
}
Can someone confirm that it runs OK?