Join 244,060 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 1,393 people online right now. Registration is fast and FREE... Join Now!
I need to write a program that asks a user to input a positive integer. I then need to out put whether the number is prime. I also need to put in an error message if the user inputs a negative number.
Well, you are declaring the function inisde the main function...that is a no no, I'm afraid...you should declare like so:
CODE
#include <iostream>
using namespace std;
int isprime(int Prime_Number); int main() { int Number = 0; cout<<"Enter a number"<<endl; cin>>Number; if(Number>0) { if(isprime(Number)==0) { cout<<"Number is prime"<<endl; } else { cout<<"Number is not prime"<<endl; } } else { cout<<"Positive numbers only"<<endl; } return 0; }
int isprime(int Prime_Number) { //prime number calculation here }
As for finding a prime number, simply start at 1, loop to the number itslef and use the modulus...if the result of that operation (userNumber%loop number) equals 0, and the loop number is something other than 1 or the user number, the number is not prime.
have a do while trying to mod divide the input int by 2 and up (++) until you hit the input value and if anything else returns 0 than the number is not prime. about the error if neg just check if the input value is < 0.
so i also needed to do this for a class and this is my code, seems to work just fine.
QUOTE
/* input positive integer and determine if it is prime */
#include <iostream.h>
void main() { long xaero; int loop=42; do { long x=2; int p=0; cout << "\n\nPlease enter a positive non zero number (-13 to quit)\n"; cin >> xaero;
if (xaero == -13) { loop=13; }
else { if (xaero < 1) { cout << "I said a POSITIVE NON ZERO"; p=13; } else { for (x;x<=xaero;x++) { if ((xaero%x)==0 && (xaero != x)) { x=xaero; cout << xaero << " is not a prime number"; p=1; } } } if (p==0) { cout << xaero << " is a prime number"; } } }while (loop != 13); }
I know I'm going to get thrashed for this... but it happens. Here is my code written in JAVA for the same exact problem. I have it done in JAVA and the theory is the same, all you have to do is change the syntax. So here it is:
CODE
for (int i = 2; i <= (Math.sqrt(primeInput)); i++) { if ((primeInput % i) == 0) { isPrime = false; break; } }
if (isPrime) JOptionPane.showMessageDialog(null, "The number you entered " + primeInput + " is PRIME!!", "We have found a prime!", JOptionPane.INFORMATION_MESSAGE); else JOptionPane.showMessageDialog(null, "The number you entered " + primeInput + " is NOT PRIME!!", "We have FAILED!", JOptionPane.ERROR_MESSAGE);
Also, I forgot about your non-negative number input, once again here is my code in JAVA.
CODE
while (primeInput < 0) { JOptionPane.showMessageDialog(null,"That was not a positive integer!", "That was not a positive integer!", JOptionPane.ERROR_MESSAGE);
I need to write a program that asks a user to input a positive integer. I then need to out put whether the number is prime. I also need to put in an error message if the user inputs a negative number.
also a hint for performance improvement, with the exception of 2 & 3, all primes are of the form (6n)+1 or (6n)-1, where n is a positive integer.* using this as a first test can greatly reduce the run time of your isprime(int) function, and only costs two statements:
Hey Dude, how about this? It's not 'that' lengthy and I find it working perfectly well. Just apply rudimental arithmatics (the use of modulus for example) and you will easily finish it. Hope it helps:
CODE
#include <stdio.h> #include <stdlib.h> #define PRIME 1 #define NOT_PRIME 0 int main(int argc, char *argv[]) { int num,flag,i,count=0; printf("Enter number : "); scanf("%d",&num); flag=PRIME; for(i=2;i<num;i++) { if(num%i==0) flag=NOT_PRIME; } if(flag==PRIME) printf("\n%d is PRIME\n",num); else printf("\n%d is NOT PRIME\n",num); system("PAUSE"); return 0; }
You guys are silly. Find a chart of prime numbers. Write an if for each number. If it matches one of them, say yay and if matching none, say nay. And if they input a number higher than all the ones you wrote, ask them to try again. Trust me. It's the truth.
Try following posting rule 7 Search for your problem before posting a new topic and you will save yourself a lot of time and heartache (and having to read useless suggestions like the one from Kanvus)
Hey Dude, how about this? It's not 'that' lengthy and I find it working perfectly well. Just apply rudimental arithmatics (the use of modulus for example) and you will easily finish it. Hope it helps:
CODE
#include <stdio.h> #include <stdlib.h> #define PRIME 1 #define NOT_PRIME 0 int main(int argc, char *argv[]) { int num,flag,i,count=0; printf("Enter number : "); scanf("%d",&num); flag=PRIME; for(i=2;i<num;i++) { if(num%i==0) flag=NOT_PRIME; } if(flag==PRIME) printf("\n%d is PRIME\n",num); else printf("\n%d is NOT PRIME\n",num); system("PAUSE"); return 0; }
Mod edit: added code tags:
People sure like this method... its very common and I called it the "naive" Prime finder because it is the most common solution. One little improvement over this method is just to limit the search from 2 to sqrt(num) rather than num... the reason for this is that if a factor is greater than sqrt(num) then its pair factor must be smaller (else when you multiplied them the result would be greater than num).
But we can even do better than limiting our factor search to just the sqrt(num)... if we rule out 2 then we only have to check out odd numbers. This makes things even faster.
We can even do better than that since all we really need to check are the prime numbers between 2 and sqrt(num) which is generally FAR less than sqrt(num)/2 comparisons.
The proof is pretty strait forward as it is the definition of a prime... "A number only divisible by 1 and itself" -- so if it is not divisible by any numbers between 1 and itself -- it is prime -- if it Is divisible by a number in that range then it is not prime.
Might want to explain how modulus determines divisibility -- but that is it.
Other than something like "The naive algorithm" I don't think this really has a name because it really is just the definition.