C++ Ошибка в программе по нахождению простого числа:

программирование C++

Если знаете, то подскажите, пожалуйста, что неправильно и что надо исправить?

Вот код:

#include <iostream>
#include <math.h>
using namespace std;

bool prime(double n)
{
double sqrt_of_n = sqrt(n);
int i;

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

int main()
{
double number=1000000000;

for(;;)
{
number++;

if(prime(number))
{
cout << number << " is a prime number";
return 0;
}
}
}

Примечание:
Вроде бы все правильно, однако каждый раз программа выдает ответ:
1e+09 is a prime number

Примечание:
>> SKYDOS
Отзыв отправлен за спам!

Примечание:
>> katzyn
А с какими числами надо работать?

Примечание:
>> SKYDOS
Не нужна мне никакая програ, да к тому же замудреная, мне надо мою исправить.

Примечание:
if((int)n%2==0) return false;
Исправил на:
if((int)n%i==0) return false;

Все равно неправильно вычисляет.

Примечание:
Поменял тип данных на long, и все заработало!
Спасибо SKYDOS и katzyn

Примечание:
Задание:
найти первое простое число, начиная с миллиарда.

Примечание:
Программа выдает:
1000000007 is a prime number

Я думаю все правильно...
Проверьте кто-нибудь.
Ответы:
Ой, зря ты там с рациональными числами работаешь, ой зря.
Достаточно заменить везде double на тот же long, и всё будет хорошо. Ну и конечно, приведение типов после корня добавить, а перед остатком от деления убрать.
А, нет, не всё. Ещё где-то косяк есть.
Ещё в цикле вверху надо <= поставить.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.