2016-01-29 2 views
-1

Я недавно (очень, совсем недавно) получил программирование на C++. Я пишу программу, чтобы найти наивысшее простое число ниже prime. Тем не менее, когда я выполнить код, ничего не отображаются, а в консоли он говорит, что это:C++ - ничего не отображается в консоли, никаких ошибок не отображается, -1 возвращается

Process returned -1 (0xFFFFFFFF) execution time : 0.409 s 
Press ENTER to continue. 

Я пробовал некоторые отладки, и я понял, проблемный участок является линией 17-19 (if), но я не могу понять, что я делаю неправильно.

C++

#include <iostream> 
#include <cmath> 
using namespace std; 

int main() 
{ 
    //cout << "maybe here?"; 
    int prime = 1000; 
    //cout << "here"; 
    while(true){ 
     //cout << "here2"; 
     int testr = ceil(sqrt(prime)); 
     cout << testr; 
     bool isprime = true; 
     for(int i = 0; i < testr; i++){ 
      cout << i << " "; 
      if(testr % i == 0){ 
       isprime = false; 
      } 
     } 
     if(isprime){ 
      break; 
     }else{ 
      prime--; 
     } 
    } 
    cout << prime; 
} 

Любой помощь приветствуется! Благодаря!

Дополнительная информация: Я использую код :: Блоки на Mac OSX 64 бит. Я привык к программированию на Java, поэтому это может быть просто C++, о котором я не знаю.

+0

Как вы это поняли? – SergeyA

+0

@SergeyA Основная отладка - комментируйте вещи, пока не найдете то, что нарушает код. – michal

+1

@michal - это * НЕ * базовая отладка, это называется «пробная ошибка». Базовая отладка запускает вашу программу под отладчиком, шаг за шагом и исследует значения переменных. –

ответ

5

Достаточно несколько вопросов.

1) Ответ на ваш вопрос «найти наименьшее простое число ниже prime» - 2, не требуется программирование.

2) Предполагая, что вы хотите найти наибольшее простое число ниже prime, вы должны проверить все номера от prime - 1 вниз.

3) Самый первая итерация цикла:

for(int i = 0; i < testr; i++){ 
    cout << i << " "; 
    if(testr % i == 0){ 

вызовет исключение: деление на 0.

+0

Мой плохой. Я хотел сказать наивысший. Сожалею. – michal

1

Причины в том, что вы пытаетесь разделить на 0 в вашем для цикл вы должны начать с 2. Взгляните на это, это оптимально, я думаю.

bool isPrime(int n) { 

    if(n<2) 
    return false; 

    for(int i=2;i*i<=n;i++) 
    if(n%i==0) 
     return false; 
    return true; 
} 
+0

Это и не оптимально, и неверно. Протестируйте его с помощью '2'. –

+0

Он возвращает true для 2, так что это правильно. Не могли бы вы уточнить свою точку зрения? – user2389307

+0

Извините, я упустил i * i <= n; контрольная работа. Что касается оптимального, вы можете сначала проверить деление на 2, а затем проверить только нечетные числа. Кроме того, вместо вычисления i * i на каждой итерации, получите sqrt (n) один раз и сравните i с этим. –

Смежные вопросы