0

I'm trying to make a program where you enter the number you want to find primes up to which then lists all the primes up to that number... But I enter 100 then it just sits there... Here's my code so far:

#include <iostream>
#include <cmath>
int prime(int);

int main()
{
using namespace std;
int upto;
int current = 3;
cout << "Find primes up to: ";
cin >> upto;
while(current < upto){
        cout << prime(current) << endl;
}
system("pause");
return 0;
}

int prime(int p)
{
int test = p - 1;
while(test > -1){
if(test == 0){
        return p;
}
else if(test % p ==  0){
     return 0;
}
else
    test - 1;
}
}
2
Contributors
11
Replies
13
Views
6 Years
Discussion Span
Last Post by Progr4mmer
0

I think the problems in the way i put the formula for primes into code.

0

thanks but i might still have issues. ill post new code if that is the case.

0

my new code looks like this

#include <iostream>
#include <cmath>
int prime(int);

int main()
{
using namespace std;
int upto;
int current = 3;
cout << "Find primes up to: ";
cin >> upto;
while(current < upto){
        cout << prime(current) << endl;
        current += 1;
}
system("pause");
return 0;
}

int prime(int p)
{
int test = p - 1;
while(test > -1){
if(test == 0){
        return p;
}
else if(test % p ==  0){
     return 0;
}
else
    test - 1;
}
}

when i run it and enter the value it doesnt output anything or end ?

0

That's because you have the same problem in your prime function: You never change the value of the variable test, so the program never terminates.

0

sorry forgot to do

else
test -= 1;

Edited by Progr4mmer: n/a

0

now it "works" but it just outputs all the numbers 3+ to the number you entered. again heres my code

#include <iostream>
#include <cmath>
int prime(int);

int main()
{
using namespace std;
int upto;
int current = 3;
cout << "Find primes up to: ";
cin >> upto;
while(current < upto){
        cout << prime(current) << endl;
        current += 1;
}
system("pause");
return 0;
}

int prime(int p)
{
int test = p - 1;
while(test > -1){
if(test == 0){
        return p;
}
else if(test % p ==  0){
     return 0;
}
else
    test -= 1;
}
}
0

You have (at least) two problems.

The first one is that the expression test % p in line 27 should be p & test.

The second is more subtle. Look at the loop in lines 23-32. You will see that the only way that your prime function can ever return anything but 0 is if the variable "test" reaches 0.

However, before it reaches 0, it has to reach 1--and when it does, line 27 will compute p % test (after you've fixed it) with test equal to 1, which will always be zero. So the function will always return zero.

I'm not going to tell you how to solve this problem, because I've already done enough of your homework for you.

0

thanks for all the help you dont need to do anything else. happy posting!

You have (at least) two problems.

The first one is that the expression test % p in line 27 should be p & test.

The second is more subtle. Look at the loop in lines 23-32. You will see that the only way that your prime function can ever return anything but 0 is if the variable "test" reaches 0.

However, before it reaches 0, it has to reach 1--and when it does, line 27 will compute p % test (after you've fixed it) with test equal to 1, which will always be zero. So the function will always return zero.

I'm not going to tell you how to solve this problem, because I've already done enough of your homework for you.

0

FIXED:

#include <iostream>
#include <cmath>
int prime(int);

int main()
{
  using namespace std;
  int upto;
  int current = 3;
  cout << "Find primes up to: ";
  cin >> upto;
  cout << "upto = " << upto << endl;
  while(current < upto){
  if(prime(current) != 0){
    cout << prime(current) << endl;
    }
    current += 1;
  }
  system("pause");
  return 0;
}

int prime(int p)
{
  int test = p - 1;
  while( test > 1 ){
    if( p % test ==  0 ){
      return 0;
    }
    else
      test -= 1;
  }
  return p;
}
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.