Connecting Tech Pros Worldwide Help | Site Map

Prime No. generator

ume$h
Guest
 
Posts: n/a
#1: Apr 21 '07
Why does this program fail to run?

//FIRST n PRIMES
#include <iostream.h>
#include <math.h>

int main(void)
{
long int i,j=3,count=1;
int n,flag=0;
cout<<"How many primes?";
cin>>n;
cout<<"2, ";
while(count<n)
{
for(i=1;i<(sqrt(j)+1);++i){
if(j%i==0) {flag=1;break;}
if(j>3 && flag==0) {cout<<j<<", ";++count;}}
++j;
}
return 0;
}

Heinz Ozwirk
Guest
 
Posts: n/a
#2: Apr 21 '07

re: Prime No. generator


"ume$h" <fraternitydisposal@gmail.comschrieb im Newsbeitrag
news:1177178809.327685.144790@b75g2000hsg.googlegr oups.com...
Quote:
Why does this program fail to run?
>
//FIRST n PRIMES
#include <iostream.h>
#include <math.h>
>
int main(void)
{
long int i,j=3,count=1;
int n,flag=0;
cout<<"How many primes?";
cin>>n;
cout<<"2, ";
while(count<n)
{
for(i=1;i<(sqrt(j)+1);++i){
if(j%i==0) {flag=1;break;}
if(j>3 && flag==0) {cout<<j<<", ";++count;}}
++j;
}
return 0;
}
1) How is a prime defined? Especially, what does the definition say about
dividing a prime by 1?
2) Is 3 a prime?
3) Are there any even primes except 2.
4) What happens to 'flag' once your program found a prime?
5) How often does your program compute sqrt(j) for each j?

Perhaps your answers to these questions will help you solving your problem.

HTH
Heinz


osmium
Guest
 
Posts: n/a
#3: Apr 21 '07

re: Prime No. generator


"ume$h" writes:
Quote:
Why does this program fail to run?
>
//FIRST n PRIMES
#include <iostream.h>
#include <math.h>
>
int main(void)
{
long int i,j=3,count=1;
int n,flag=0;
cout<<"How many primes?";
cin>>n;
cout<<"2, ";
while(count<n)
{
for(i=1;i<(sqrt(j)+1);++i){
if(j%i==0) {flag=1;break;}
Where is the code that sets flag equal to 1?
Can you get out of the loop without setting the flag?

You seem to be using Windows so here's a tip:

Activate the task mgr. Then activate your program. If the green icon in
the task bar turns bright green, you program is in a tight loop. (As here.)
Quote:
if(j>3 && flag==0) {cout<<j<<", ";++count;}}
++j;
}
return 0;
}
>

ume$h
Guest
 
Posts: n/a
#4: Apr 21 '07

re: Prime No. generator


//This one runs(Ultimately by self attempt!)

#include <iostream.h>
#include <math.h>
int main(void)
{
long int i,j=3,count=1;
int n;
cout<<"\nHow many first primes do you want to generate? ";
cin>>n;
if(n<0) {cout<<"Wrong No.\n Enter No. Again"; cin>>n;}
if(n==1 || n>1)cout<<"2, ";
if(n>1) while(count<n)
{

int flag=0;
for(i=2;i<sqrt(j)+1;++i)

if(j%i==0)
{
flag=1;break;
}

if(flag==0)
{
++count;cout<<j<<", ";
}
++j;

}

return 0;
}

red floyd
Guest
 
Posts: n/a
#5: Apr 21 '07

re: Prime No. generator


ume$h wrote:
Quote:
Why does this program fail to run?
Define "fail to run". Does it not compile? Does it give erroneous output?
See FAQ 5.8 http://www.parashift.com/c++-faq-lit...t.html#faq-5.8

Quote:
//FIRST n PRIMES
#include <iostream.h>
Non-standard header. #include <iostreamisntead
Quote:
#include <math.h>
using namespace std; // to get cin and cout.
Quote:
>
int main(void)
void in this context is superfluous and discouraged in C++.
Quote:
{
long int i,j=3,count=1;
int n,flag=0;
poor practice. Better practice is one declaration per line.
Define i inside the for loop. e.g. for (int i = 1; ...)
Quote:
cout<<"How many primes?";
cin>>n;
cout<<"2, ";
while(count<n)
{
for(i=1;i<(sqrt(j)+1);++i){
Hint: if you only check odd numbers for primality (see below), you can
increment i by 2 instead of 1.
Quote:
if(j%i==0) {flag=1;break;}
Your problem lies here. Hint. What is the initial value of i?
What is the value of j%i, for any j, given that initial value of i?

Also, formatting -- put the body of the if on a separate line.
Quote:
if(j>3 && flag==0) {cout<<j<<", ";++count;}}
Ditto here.
Quote:
++j;
Hint: 2 is the only even prime. You can bump j by 2.
Quote:
}
return 0;
}
>
Closed Thread