Umesh said:
/*I can program it if user gives an upper limit. If user wants to
generate first n twin primes, I'm failing to do that. Slight
modifications are required. Thnaks.*/
// TWIN PRIMES BELOW A RANGE
#include <stdio.h>
#include <math.h>
int main(void)
{
long r,i,j,k=1,a[1000],num=0;
printf("Enter Upper Limit: ");
scanf("%ld",&r);
for(i=3;i<=r;++i)
{
int flag=0;
for(j=2;j<=sqrt(i)+1;++j)
Are you sure you want to use *all* values of j from 2 to sqrt(i)+1?
If you want to check wheter n is prime, remember that all primes >2
are odd, so you might want to do:
int is_prime(unsigned n)
{
int flag;
switch (n) {
case 0:
case 1:
flag = 0;
break;
case 2:
flag = 1;
break;
default:
if (n % 2 == 0)
flag = 0;
else {
int i;
flag = 1;
for (i = 3; i*i <= n; i += 2)
if(n % i == 0) {
flag = 0;
break;
}
}
}
return flag;
}
But all primes >4 are either 6i - 1 or 6i + 1, so try:
int is_prime(unsigned n)
{
int flag;
switch (n) {
case 0:
case 1:
case 4:
flag = 0;
break;
case 2:
case 3:
flag = 1;
break;
default:
if (n % 6 != 1 && n % 6 != 5)
flag = 0;
else {
int i1, i2;
flag = 1;
for (i1 = 5, i2 = 7; i1*i1 <= n; i1 += 6, i2 += 6)
if(n % i1 == 0 || n % i2 == 0) {
flag = 0;
break;
}
}
}
return flag;
}
This way you'll need about 1/3 as many divisions.
If you are building an array of all the first N primes, you might
speed it up even more by only trying to divide candidates by
*primes* below sqrt(candidate), using the part of the array you've
already built. The implementation of this is left as an exercise.