Форум программистов, компьютерный форум CyberForum.ru

Нахождения больших простых чисел - C++

Восстановить пароль Регистрация
 
Student_161
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 17
07.04.2014, 00:06     Нахождения больших простых чисел #1
Нахождения больших простых чисел. Реализовать программу на C++. спасибо за помощь
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2014, 00:06     Нахождения больших простых чисел
Посмотрите здесь:

C++ Сформировать массив простых чисел не больших заданного натурального числа N.
Написать программу нахождения первых 50 простых чисел C++
C++ помогите задача сформировать массив простых чисел не больших заданного натурального числа N.
C++ Алгоритм нахождения ПРОСТЫХ чисел в файле
Алгоритм нахождения простых чисел C++
Алгоритм нахождения простых чисел C++
Подсчитать количество простых чисел в последовательности, больших заданного числа М C++
C++ Методы построения простых больших чисел, теорема Поклингтона

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
07.04.2014, 05:41     Нахождения больших простых чисел #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Student_161, а насколько больших? Если просто простых, то Вам думаю подойдет и решето Эратосфена:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <memory.h>
 
void resheto(bool prime[])
{
    for(i=3;(temp=i*i) <=n;i+=2)
        if(prime[i])
            for(j=temp;j<=n;j+=i)
                prime[j]=false;
}
 
int main()
{
    bool *prime=new bool[n+1];
    memset(prime,1,n+1);
    prime[0]=prime[1]=false;
    resheto(prime);
}
Также есть и линейное решето Эратосфена:http://e-maxx.ru/algo/prime_sieve_linear
Можете погуглить в сторону решета Аткина, но оно особо сильного выигрыша не даст, хотя он и будет.

Можно пойти другим путём, проверять числа на простоту. Тут уже подойдет разнообразные тесты. Простой факторизацией - это слишком долго, поэтому тесты обычно вероятностные. Лично я в олимпиадах использую всегда тест Миллера-Рабина, улучшенный со слов Гены Короткевича, который нам лекции читал.Вот код:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
 
using namespace std;
typedef long long ll;
 
ll n,s,t,k;
ll p[3]={2,7,61};
 
ll mulmod(ll x,ll y,ll n)
{
    ll res=0;
    while(y)
    {
        if(y&1) res=(res+x)%n;
        x=(x+x)%n;
        y>>=1;
    }
    return res;
}
 
ll powmod(ll x,ll y,ll n)
{
    ll res=1;
    while(y)
    {
        if(y&1) res=mulmod(res,x,n);
        x=mulmod(x,x,n);
        y>>=1;
    }
    return res;
}
 
 
bool miller(ll s,ll t,ll a)
{
    ll x=powmod(a,t,n);
    if(x==1 || x==n-1)  return true;
    for(ll j=1;j<s;++j)
    {
        x=mulmod(x,x,n);
        if(x==1)    return false;
        if(x==n-1)  return true;
    }
    return false;
}
 
bool del()
{
    ll temp=sqrt(n);
    for(ll i=2;i<=temp;++i)
        if(n%i==0)
            return false;
    return true;
}
 
bool check()
{
    if(n<=1)    return false;
    if(n==2)    return true;
    if(n<=100)  return del();
    t=n-1;
    while(!(t&1))
    {
        ++s;
        t>>=1;
    }
    bool ok=true;
    for(ll j=0;j<3 && ok;++j)
        ok=miller(s,t,p[j]);
    return ok;
}
 
 
int main()
{
    cin>>n;
    cout<<check()<<endl;
    system("pause");
    return 0;
}
Тест работает правильно до 10 в 18 степени(дальше не проверял просто).
Также можете смотреть в сторону теста BPSW : http://e-maxx.ru/algo/bpsw
Student_161
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 17
07.04.2014, 09:57  [ТС]     Нахождения больших простых чисел #3
ZaMaZaN4iK, простые числа размером не менее 512 бит
Yandex
Объявления
07.04.2014, 09:57     Нахождения больших простых чисел
Ответ Создать тему
Опции темы

Текущее время: 05:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru