Reputation: 1490
#include "stdafx.h"
#include "math.h"
#include <string>
#include <iostream>
using namespace std;
int main ()
{
int x;
cout << "Enter a number." << endl;
cin >> x;
int y = 1;
int i = 0;
while (i == 0 && y < sqrtf(x))
{
if (fmodf(x,y) == 0)
{
i = 1;
}
else
{
i = 0;
}
y++;
if (i == 1)
{
cout << "Your number is prime." << endl;
}
else
{
cout << "Your number is composite." << endl;
}
}
return 0;
}
This is a code I created to test for primes. After sorting out several debugging issues I was able to run it.
It opened the command window, read 'Enter a number' and closed itself the second I entered a number.
Help?
Upvotes: 1
Views: 79
Reputation: 18902
You have to:
while
loop in the correct placeif (i == 1)
condition (i==1
means x
is divisible by some y
)y = 2
(every number is divisible by one)sqrtf(x)
in the loop (y <= sqrtf(x)
or 15, 25, 35... are primes).So:
int main()
{
int x;
cout << "Enter a number." << endl;
cin >> x;
int y = 2; // <-- changed
int i = 0;
while (i == 0 && y <= sqrtf(x)) // <-- changed
{
if (fmodf(x,y) == 0)
{
i = 1;
}
else
{
i = 0;
}
y++;
} // <-- moved here
if (i == 0) // <-- changed
{
cout << "Your number is prime." << endl;
}
else
{
cout << "Your number is composite." << endl;
}
return 0;
}
works (more or less...).
Anyway:
using namespace std;
(Why is "using namespace std" considered bad practice?)\n
should be your default ("\n" or '\n' or std::endl to std::cout?)y
and x
are integers so you can use %
instead of fmodf
else { i = 0; }
is superfluousy < sqrtf(x)
with y * y <= x
(and you don't need math.h
anymore) or find square root of number then start the loopSomewhat better (but far from perfect):
#include <cmath>
#include <iostream>
int main()
{
int x;
std::cout << "Enter a number.\n";
std::cin >> x;
int square_root = std::sqrt(x);
int y = 2;
int i = 0;
while (i == 0 && y <= square_root)
{
if (x % y == 0)
i = 1;
++y;
}
if (i == 0)
std::cout << "Your number is prime.\n";
else
std::cout << "Your number is composite.\n";
return 0;
}
Now:
bool
would express your intentions better than int i
;Upvotes: 1