Start New Discussion within our **Software Development Community** Not Yet Answered # Print Prime Numbers(using for loop)

Discussion Starter john_hasan hollystyles 113 Featured Reply Salem 5,138 hollystyles 113 Featured Reply Salem 5,138 shavez_israr Featured Reply Salem 5,138 hollystyles 113 hollystyles 113 iamthwee 1,547 hollystyles 113 dude543 2 Featured Reply Salem 5,138 hollystyles 113 hollystyles 113 dude543 2 hollystyles 113 Bench 212

-2

It is my while loop program:

```
#include<stdio.h>
#include<conio.h>
void main()
{
int count,i=1;
int a;
clrscr();
while(i<=500)
{
count=0;
a=1;
while(a<=i)
{
if(i%a==0)
count++;
a++;
}
if(count==2)
printf("%d\t",i);
i++;
}
getch();
}
```

0

Here you go. Added for loop in place of while, and commented out the i++ at end of while loop.

Also added int variable col, to print a newline every ten numbers printed to standard out.

```
#include<stdio.h>
#include<conio.h>
int main(int argc, char *argv[])
{
int count,i=1;
int a;
int col=0;
//while(i<=500)
for(i=1; i<501; i++)
{
count=0;
a=1;
while(a<=i)
{
if(i%a==0)
count++;
a++;
}
if(count==2){
printf("%d\t",i);
col++;
if(col%10==0)
printf("\n");
}
//i++;
}
system("PAUSE");
return 0;
}
```

0

> I make this program but with while loop then i was told to make it using for loop, which i tried but failed.

So turn

```
i = 0;
while ( i < 500 ) {
// do stuff
i++;
}
```

To

```
for ( i = 0 ; i < 500 ; i++ ) {
// do stuff
}
```

0

DOH! Salem

Johns' while loop was: less than OR EQUAL to 500.

So change to for i < 501 NOT 500.

This is Johns' future your playing with, pay attention.

0

I didn't pay any attention to his program, it wasn't formatted with code tags.

All I did was illustrate the relationship between for loops and while loops, and how ridiculously easy it is to convert one into the other.

0

Friends i have little bit problem in making a c language program.

I have to make a program which prints prime numbers from 1 to 500.

I make this program but with while loop then i was told to make it using for loop, which i tried but failed.

So kindly help me. Thanks

from,

john(pakistan)

```
int flag=1;
for(int i=2;i<500;i++) //since 1 and 500 are not prime
{
flag=1;
for(int j=2;j<i/2;j++) //since a no. cannot be divisible by a
{ //no. greater than its half.
if(i%j==0) //if i is divisible by any no. between 2 & i/2
{
flag=0;
break;
}
}
if(flag==1)
printf("\n",i);
}
```

0

> for(int j=2;j<i/2;j++) //since a no. cannot be divisible by a

> { //no. greater than its half.

It's square root of actually, but hey what the heck.

At least it's not the only mistake in your code.

0

Ok here's my best shot. The key rule for a prime number is:

It has precisely two positive integer factors.

So the neatest solution I can think of counts those and quits the for loop as soon as it's found more than 2 or reached half way to n.

Can anyone better it?

```
#include <iostream>
using namespace std;
static const int MAX = 500;
static const int MIN = 0;
static const int MAXCOL = 10;
bool isPrime(int r);
int main(int argc, char *argv[])
{
int col = 0;
int n;
for(n=MIN; n<=MAX; n++)
if(isPrime(n)){
cout << n << '\t';
col++;
if(col == MAXCOL){
cout << '\n';
col = 0;
}
}
system("PAUSE");
return 0;
}
bool isPrime(int n)
{
if((n == 0)||(n == 1))
return false;
int factors = 2;
for(int i=2; i<=((int)n/2); i++){
if(n%i == 0){
factors++;
break;
}
}
if(factors == 2)
return true;
return false;
}
```

0

Ah it's just occured to me what Salem meant by square root !

A revised edition:

```
#include <iostream>
#include <cmath>
using namespace std;
static const int MAX = 500;
static const int MIN = 0;
static const int MAXCOL = 10;
bool isPrime(int r);
int main(int argc, char *argv[])
{
int col = 0;
int n;
for(n=MIN; n<=MAX; n++)
if(isPrime(n)){
cout << n << '\t';
col++;
if(col == MAXCOL){
cout << '\n';
col = 0;
}
}
system("PAUSE");
return 0;
}
bool isPrime(int n)
{
if((n == 0)||(n == 1))
return false;
int factors = 2;
for(int i=2; i<=((int)sqrt((double)n)); i++){
if(n%i == 0){
factors++;
break;
}
}
if(factors == 2)
return true;
return false;
}
```

Now if only I could make i++ step in primes!

0

>can anyone better it?

Yes, there are more faster prime number finding Al-Gore-it-hims out there.

http://en.wikipedia.org/wiki/Sieve_of_Atkin

Note I said faster as opposed to efficient. An efficient prime number list finding strategy would be rather elusive.

Also, I'm sure you can think of a much better way to pause the program than using `system("PAUSE");`

?

:lol:

0

Also, I'm sure you can think of a much better way to pause the program than using`system("PAUSE");`

?:lol:

Ok whats wrong with `system("PAUSE")`

?

I

1

I dont know that high math, but I think I can do better.

```
bool isPrime(int n)
{
bool prime ;
int lim;
if ( n == 0 || n == 1 || n % 2 == 0)
return(false);
prime = true;
lim = (int)sqrt(n);
for(int i=3; i<= lim && prime ; i+=2)
prime = n % i;
return(prime);
}
```

1

> for(int i=2; i<=((int)sqrt((double)n)); i++)

And it would be so much quicker if you didn't call sqrt() on every iteration of the loop!

n is constant (in this function), so it's root is constant also. Calculate it once and store in another variable to compare against.

Also, since 2 is prime, that's an easy case to get rid of, and you can start at 3.

Also, if you start at 3, then you can do i+=2 to only check all the odd numbers from there on.

0

Dude543 yes I like that very much.

Salem good feedback.

So system("PAUSE") then, what gives ? I havn't found anything negative on the internet yet.

Ok I've found it:

0

Actually dud543 I think this is wrong: `|| n % 2 == 0)`

That would return false for 2 which is prime.

0

Well. I also think that it is wrong.

But poor me, does'nt know wheter 0,1,2 are prime.

I know that prime will divide by himself and one only.

I Guess you are right.

Anyway. is there someway for me to edit the post ?

0

you can't edit a post more than 30 minutes after you posted in this forum.

0 and 1 are not prime. Yes 1 is divisible by 1 and itself, but that's the same thing it's only one factor not two factors so it's not prime.

2 is a special case, it is the only even number that is a prime.

0

I wouldn't call 2 a special case - it fits the general description perfectly; *A number evenly divisible only by 1 and itself.* :)

This article has been dead for over six months. Start a new discussion instead.