Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Liori
4 / 4 / 5
Регистрация: 30.08.2012
Сообщений: 155
1

Простое или составное число

12.01.2015, 17:04. Просмотров 1770. Ответов 8
Метки нет (Все метки)

Не могу понять, почему мой код не работает
Если ввожу, например, 13 пишет, что это составное число

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cmath>
using namespace std;
bool IsPrime(double n);
 
int main(int argc, char* argv[])
{
    double n;
    cin >> n;
    if (n > 0 && n!=1)
    {
        if (IsPrime(n)) cout << "prime\n";
        else if (!(IsPrime(n))) cout << "composite\n";
    }
    system("pause");
    return 0;
}
 
bool IsPrime(double n) 
{
    
    int k=0;
    double n2 = sqrt(n);
    int n3 = n2;
    
    for (int i=2; i<=n3;i++)
    {
        if ((n3%i)==0) k++;
    }
    if (k) return false;
    else return true;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2015, 17:04
Ответы с готовыми решениями:

определить число простое или составное нужно блок схему и код на с++
дано число n &gt; 1 если n является простым числом то вывести сообщение n простое...

Необходимо вывести строку prime, если число простое, или composite, если число составное
Уважаемые программисты, проверьте, пожалуйста, решение задачи Проверьте,...

Дано простое число. Составить функцию, которая будет находить следующее за ним простое число.
6.2.2. Помогите, пожалуйста, решить задачи в С++ с помощью функций. Дано...

Дано простое число. Составить функцию, которая будет находить следующее за ним простое число
Дано простое число. Составить функцию, которая будет находить следующее за ним...

Дано простое число. Составить функцию,которая будет находить следующее за ним простое число.
дано простое число.составить функцию,которая будет находить следующее за ним...

8
Тамика
Котовчанин
921 / 465 / 196
Регистрация: 16.02.2010
Сообщений: 3,284
Записей в блоге: 28
12.01.2015, 17:08 2
Цитата Сообщение от Liori Посмотреть сообщение
int n3 = n2;
А это зачем?
Цитата Сообщение от Liori Посмотреть сообщение
for (int i=2; i<=n3;i++)
В последней итерации число будет делиться само на себя, что даст лишний прирост k. В этом и дело.
0
zss
Модератор
Эксперт С++
7366 / 6772 / 4284
Регистрация: 18.12.2011
Сообщений: 17,901
Завершенные тесты: 1
12.01.2015, 17:49 3
Цитата Сообщение от Тамика Посмотреть сообщение
А это зачем?
Это такое неявное приведение double к int
0
Тамика
Котовчанин
921 / 465 / 196
Регистрация: 16.02.2010
Сообщений: 3,284
Записей в блоге: 28
12.01.2015, 17:52 4
zss, н-да, не учла.)
0
zss
Модератор
Эксперт С++
7366 / 6772 / 4284
Регистрация: 18.12.2011
Сообщений: 17,901
Завершенные тесты: 1
12.01.2015, 17:53 5
Liori, Посмотрите ссылки внизу страницы, например
Определить, простое число или нет
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
12.01.2015, 18:00 6
Цитата Сообщение от Liori Посмотреть сообщение
C++
1
bool IsPrime(double n);
число double не может быть простым
Цитата Сообщение от Liori Посмотреть сообщение
C++
1
2
3
4
for (int i=2; i<=n3;i++)
    {
        if ((n3%i)==0) k++;
    }
здесь будут лишние итерации, можно эту функцию написать проще
C++
1
2
3
4
5
6
7
8
bool IsPrime(int n)
{
    if (n == 2) return true;
    if (n < 2 || n % 2 == 0) return false;
    for (int i = 3; i*i <= n; i += 2)
        if (n % i == 0) return false;
    return true;
}
1
Liori
4 / 4 / 5
Регистрация: 30.08.2012
Сообщений: 155
12.01.2015, 18:16  [ТС] 7
Тамика, если я не присваиваю переменной n3 значение n2, возникает ошибка error C2296: %: недопустимо, левый операнд имеет тип "double"
Поменяла <= на <, но программа все равно не все тесты проходит
0
SuurKissat
34 / 34 / 16
Регистрация: 11.01.2015
Сообщений: 130
12.01.2015, 18:45 8
1. Напишите, какой именно код не все тесты проходит и на каком именно числе он дает ошибку.
2. Может я чего-то не понимаю, но функция в первом сообщении написана Странно
C++
1
if ((n3%i)==0)
Здесь Вы проверяете, является ли простым или составным n3, то есть корень из n, а не само n!
0
Тамика
Котовчанин
921 / 465 / 196
Регистрация: 16.02.2010
Сообщений: 3,284
Записей в блоге: 28
13.01.2015, 09:28 9
Цитата Сообщение от Liori Посмотреть сообщение
Тамика, если я не присваиваю переменной n3 значение n2, возникает ошибка error C2296: %: недопустимо, левый операнд имеет тип "double"
А почему бы не сделать так?
C++
1
int n2 = sqrt(n);
Попробуйте так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cmath>
using namespace std;
bool IsPrime(int n);
 
int main(int argc, char* argv[])
{
    while(true)
    {
    int n;
    cin >> n;
    if (n > 0 && n!=1)
    {
        if (IsPrime(n)) cout << "prime\n";
        else if (!(IsPrime(n))) cout << "composite\n";
    }
    }
    system("pause>>null");
    return 0;
}
 
bool IsPrime(int n) 
{
    int k=0;
    int n2 = sqrt(n);
 
    for (int i = 2; i <= n2; i++)
    {
        if ((n % i) == 0) k++;
    }
 
    if (k) return false;
    else return true;
}
0
13.01.2015, 09:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2015, 09:28

Дано простое число. Составить функцию, которая будет находить следующее за ним простое число
Дано простое число. Составить функцию, которая будет находить следующее за ним...

Простое число или нет
#include &lt;iostream&gt; #include&quot;conio.h&quot; #include&quot;math.h&quot; using namespace std;...

Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат
Передать в функцию целое число. Функция заменяет его на ближайшее простое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru