Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/32: Рейтинг темы: голосов - 32, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 6

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

25.04.2011, 21:40. Показов 7195. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
сам код
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
#include "stdafx.h"
#include "iostream"
#include "vector"
 
using namespace std;
 
int f(int n) {
        vector<char> prime (n+1, true);
prime[0] = prime[1] = false;
for (int i=2; i<=n; ++i)
    if (prime[i])
        for (int j=i*i; j<=n; j+=i)
            prime[j] = false;
return prime[n];}
 
int main () {
    int n;
    cin >> n;
    int *a=new int [n];
    for (int i=0;i<n;i++) {cin >> a[i];
    if (f(a[i])) cout << "YES" << endl; else cout << "NO" << endl;}
 
    
return 0;}
Числа в интервале от 1 до 10^9.
Необходимо увеличить быстродействие. Я так понимаю, что-то неладное с большими числами
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2011, 21:40
Ответы с готовыми решениями:

[Cи] Проверка чисел на простоту
Как в Си написать программу, которая проверяла бы вводимые числа на простоту вероятностными методами. Числа поряка 10^5000---10^20000 за...

Проверка чисел на простоту и проверку на наличие общих цифр в записи
Помогите написать программу: Для каждого (n) из некоторого количества натуральных чисел указать простое число К, ближайшее к числу n и...

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

7
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 6
28.04.2011, 16:22  [ТС]
Есть предложения?
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
29.04.2011, 08:55
В функции проверки в первом цикле i надо сравнивать с округленным корнем квадратным из n. В вашем же варианте большую часть времени цикл будет работать в пустую. И вообще непонятно зачем сдесь чаровский вектор, если заменить работу с ним на обычное нахождение остатка от деления, к улучшенному быстродействию можно еще получить и экономию памяти (довольно значительную при больших числах).
0
 Аватар для olleg90
40 / 40 / 12
Регистрация: 06.01.2011
Сообщений: 90
29.04.2011, 11:31
щас напишем))

Добавлено через 15 минут
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
#include <iostream> 
#include <cmath> 
 
int prost(int x)
 {   if (x==2) return 1;
     if (x==0||x==1||x%2==0) return 0;
     for (int i=3; i<sqrt((float)x); i+=2)
        if (x/i==0) return 0;
        return 1;
 }
 
void main ()
{ int *A,N;
std::cout<<"Input N ";
std::cin>>N;
A=new int [N];
for (int i=0; i<N; i++)
    {   std::cout<<"A["<<i<<"]"<<std::endl;
        std::cin>>A[i];
        if (prost(A[i])) std::cout<<"yes"<<std::endl;
        else std::cout<<"no"<<std::endl;
    }
system ("pause");
}
1
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
29.04.2011, 12:00
olleg90, вы свою программу хотя бы компилировали?

Добавлено через 17 минут
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>
 
bool isPrime(unsigned int number)
{
   if (number < 2)
      return 0;
   unsigned int root = static_cast<unsigned int>(std::sqrt(static_cast<double>(number)));
   for (int i = 2; i <= root; i++)
      if ((number % i) == 0)
         return 0;
   return 1;
}
 
int main(int argc, char* argv[])
{
   unsigned int size, num;
 
   std::cout << "Ââåäèòå êîëè÷åñòâî ÷èñåë: ";
   std::cin >> size;
 
   for (int i = 0; i < size; i++)
   {
 
      std::cout << "Ââåäèòå ÷èñëî: ";
      std::cin >> num;
      if (isPrime(num))
         std::cout << "×èñëî " << num << " ïðîñòîå." << std::endl;
      else
         std::cout << "×èñëî " << num << " ñîñòàâíîå." << std::endl;
   }
   std::system("pause");
   return 0;
}
2
 Аватар для olleg90
40 / 40 / 12
Регистрация: 06.01.2011
Сообщений: 90
29.04.2011, 13:04
Цитата Сообщение от kazak Посмотреть сообщение
olleg90, вы свою программу хотя бы компилировали?
да! а в чем проблема?
0
 Аватар для Manjak
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
29.04.2011, 13:09
Алгоритм, если мне не изменяет память, называется решето Эратосфена. Для его реализации лучше подойдет битсет. По вопросу реализации - индусский подход, зачем для каждого числа пересчитывать полный набор чисел? Числа пропускаются через решето только один раз, а потом просто проверяется значение по индексу выбранного числа.
1
 Аватар для olleg90
40 / 40 / 12
Регистрация: 06.01.2011
Сообщений: 90
29.04.2011, 13:10
я согласен что в строке
C++
1
if (x==0||x==1||x%2==0) return 0;
лучше написать так
C++
1
if (x<2||x%2==0) return 0;
а так все норм
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2011, 13:10
Помогаю со студенческими работами здесь

Проверка числа на простоту
Помогите решить 2 задачки, пожалуйста, 1. Написать программу для проверки натурального числа N на простоту. N вводится с клавиатуры. ...

Проверка числа на простоту
я реализовал вот так, но алгоритм очень долгий, мне надо проверять очень большое количество чисел (десятки тысяч) и он так надолго виснет...

Проверка на простоту числа
как мне сделать так, чтобы узнать простое является число или составное, не через bool, а как-нибудь через оператор switch case: т е, case...

Проверка числа на простоту
Написать программу, которая запрашивает массив натуральных чисел (ввод с клавиатуры), а затем выводит на экран те элементы массива, которые...

Проверка числа на простоту
Почему, если необ. проверить, является ли число простым(напр. ч-ло n),можно просматривать делители не от 2 до n, а от 2 до sqrt(n)? P.S....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru