forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Простое ли число? (http://forum.boolean.name/showthread.php?t=14916)

Hagrael 17.06.2011 16:53

Простое ли число?
 
Вот еще одна нерабочая программка от моего издания:
Код:

#include <iostream>
#include <math.h>

using namespace std;

int main() {
    int n;
        bool is_prime=true;

        cout << "Input n: ";
        cin >> n;

    for (int i=0; i<=9; i++) {
            if (!(n%i)) {
                    // here
            }
    }

    if (is_prime) {
            cout << "Yes! Your number is prime!";
    } else {
            cout << "Lol, can't you see difference between a prime number and not a prime one?";
    }

    return 0;
}

Консоль запускается, но после введения пользователем числа, высвечивается окошко с сообщением:
"Исключение unknown software exception 0xc000094 в приложении по адресу 0x0040146f.
'OK' -- завершение приложения"
'Отмена' -- отладка приложения".
При чем, это сообщение открывается только тогда, когда я вставляю какую-нибудь инструкцию в место, помеченное меткой "here". Что не так, помогите, пожалуйста, разобраться.

IGR 17.06.2011 16:57

Ответ: Простое ли число?
 
Цитата:

когда я вставляю какую-нибудь инструкцию в место, помеченное меткой "here".
например ??

YellowAfterlife 17.06.2011 17:09

Ответ: Простое ли число?
 
Код:

for (int i=0; i<=9; i++) {
            if (!(n%i))

Я вижу вы любите делить на 0? А на ноль делить нельзя*. Тем более искать остаток от деления на 0.
Стоит заменить i=0 на i=1 и программа будет работать.
*Если вы не работаете с языком D.

Хорошего дня.

Igor 18.06.2011 00:12

Ответ: Простое ли число?
 
Цитата:

Стоит заменить i=0 на i=1 и программа будет работать.
все числа прекрасно делятся на 1, меняй стразу на i=2.
советы по оптимизации: проверить не является ли число двойкой, (сразу простое), потом проверить на чётность, потом проверять на делимость на нечётные числа до тех пор пока i>sqrt(n), а поскольку считать в цикле помногу раз корень плохо, посчитать его один раз, сохранить в переменную и сравнивать с ней
if ((n>2) & !(n%2)) //возможно тут надо писать не & а что-то иное
{int sq=sqrt(n);
for (int i=3; i<=sq; i+=2)
{ if (!(n%i)) {...
}}}
P.S. В С++ я не мастер))

L-ee-X 18.06.2011 00:48

Ответ: Простое ли число?
 
Цитата:

Сообщение от YellowAfterlife (Сообщение 191948)
*Если вы не работаете с языком D.

На счет языка D :) Кто нибудь пробовал на нем работать?? И на сколько он лучше С++ или хуже? :)

Hagrael 18.06.2011 12:31

Ответ: Простое ли число?
 
Ох, что-то я ступил. Спасибо!
Но почему же тогда пустой блок if работал? Может, компилятор сам стирает пустые условия?

den 18.06.2011 13:46

Ответ: Простое ли число?
 
в яве и шарпе тоже можно на ноль делить!:)
получится + или - infinity

HolyDel 18.06.2011 15:28

Ответ: Простое ли число?
 
Цитата:

в яве и шарпе тоже можно на ноль делить!
получится + или - infinity
целые числа??? float в плюсах тоже можно делать на ноль.

Hagrael 18.06.2011 16:11

Ответ: Простое ли число?
 
А вот теперь такая странность возникла. Почему-то вот такой код:
Код:

double n=1000000009;
cout << n << endl;
n=static_cast<int>(n);
cout << n;

выдает 2 одинаковых ответа. Почему?

HolyDel 18.06.2011 16:14

Ответ: Простое ли число?
 
потомучто n - double

как была так и осталась
вот если бы ето было 1С то и тип у n был бы новый, а в плюсах статическая типизация. привыкай :)

mr.DIMAS 18.06.2011 18:46

Ответ: Простое ли число?
 

Цитата:


if ((n>2) & !(n%2)) //возможно тут надо писать не & а что-то
иное
{int sq=sqrt(n);
for (int i=3; i<=sq; i+=2)
{ if
(!(n%i)) {...
}}}

что это было?

Igor 18.06.2011 18:53

Ответ: Простое ли число?
 
кусок кода, который можно добавить в код в первом сообщении вместо "for (int i=0; i<=9; i++) { if (!(n%i)) {".
Что не так?


Часовой пояс GMT +4, время: 21:56.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot