Please edit your post and put
[code] [/code] tags between your code.
Do you indent your code? Because once you correctly indent your code, the problem becomes at least bit more apparent.
This is the meat of your prime logic:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
for (int i = 2; i <= num/2; i++)
{
if (primenum%i == 0)
{
isPrime = false;
}
else if (primenum%i != 0)
{
isPrime = true;
}
}
if (isPrime)
{
ans = primenum;
}
|
I think it's absolutely ridiculous that you're not allowed to make a function like int isPrime(int num), but anyway...
The problem is you are treating checking whether a number is a prime with the same weight as checking something isn't a prime.
This part of your code is wrong:
1 2 3 4
|
else if (primenum%i != 0)
{
isPrime = true;
}
|
because a number not being divisible by one particular number is not a sufficient test to prove that a number is prime. it must not be divisible by
every number between itself and 1 (with further optimizations being done from there).
In other words: You're not checking if a number is prime, you're only checking if the last factor before num/2 is prime.
So: Assume that a number isPrime from the start. Then, when you find a divisible factor, you say it isn't prime
1 2 3 4 5 6 7 8
|
if (primenum%i == 0)
{
isPrime = false;
}
else if (primenum%i != 0)
{
isPrime = true;
}
|
Edit: You also need to reset isPrime to true before the inner for loop.
PS: Although in this particular example, the logic is wrong either way, it's important to note the redundancy in what you wrote.
1 2 3 4 5 6 7 8
|
if (my_var == 0)
{
/// do something
}
else if (my_var != 0)
{
/// do something else
}
|
The second if is redundant because if my_var == 0 is false, that already implies that my_var != 0.
You can simply do
1 2 3 4 5 6 7 8
|
if (my_var == 0)
{
}
else
{
}
|
(@
lastchance below: That's definitely the more efficient solution, although what he already has was almost correct, so I just kept most of his existing logic intact.)