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

Сумма простых чисел ускорение - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вылетает программа при удалении элемента вектора http://www.cyberforum.ru/cpp-beginners/thread750692.html
Всех с новым годом, уважаемые киберфорумцы! Сделал я на днях класс Button, который, как и положено, представляет из себя кнопку (работаю с библиотекой SDL). Класс примерно вот такой: class Button { private: SDL_Rect Box; SDL_Surface* Image; //according ButtonState bool IsActive; int ButtonState; //0 - not active, 1 - active, 2 - mouse is over, 3 - pressed
C++ Ошибка библиотеки в коде программы?:) Всем привет. Вот этот код компилируется без ошибок и все работает #include <windows.h> #include <gl\GLU.h> #include <gl\GL.h> #include <time.h> #include <math.h> #include "glaux.h" #include <cstdio> #pragma comment (lib,"opengl32.lib") http://www.cyberforum.ru/cpp-beginners/thread750688.html
C++ AppWizards
Привет! Создаю приложение MFC в Visual Studio 10, после задания названия будущего приложения меня кидает в браузер (фото 1). Но на странице кнопки не активны. Папка с проектом создается, но не более.. В чем может быть проблема?
C++ Ошибка при компиляции: "Не удается найти указанный файл"
Всех С Новым Годом!!! При компиляции в VS 12 у меня выдает ошибку. Пробовал в VS 10 аналогично. Код #include <iostream> using namespace std;
C++ Увеличение функциональности без использования наследования. Как? http://www.cyberforum.ru/cpp-beginners/thread750645.html
Добрый день. Можно ли как-нибудь еще увеличить функциональность своего класса без использования наследования? Делаю свой класс А, в нем хочу реализовать несколько фич класса B. Сам я эти фичи написать не могу, т.к. не знаю, как они делаются, да и зачем изобретать велосипед. Ради каких-то нескольких функций наследовать класс B не хочу. Что можете посоветовать? Может хитрости какие есть? Знаю...
C++ Проблемы при вызове деструктора В процессе работы программы указатель на класс Dictionary,который является членом класса DictionaryManager,должен указывать на разные объекты класса Dictionary и вот когда мне нужно удалить память выделенную для старого объекта и выделить для нового,возникают проблемы Так я удаляю выделенную память // if(CurrentDict == NULL) CurrentDict = new Dictionary(ListOfFiles.at(choise - 1));... подробнее

Показать сообщение отдельно
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
01.01.2013, 23:03     Сумма простых чисел ускорение
Если использовать такую реализацию на основе рандомизированного теста простоты Миллера-Рабина, то выйдет примерно 45 минут на моем железе (если вычислять до 230).
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
85
86
87
88
89
90
91
92
#include<iostream>
#include<ctime>
#include<cmath>
 
using namespace std;
 
int ModExp(unsigned int a,unsigned int b,unsigned int n)
{
    unsigned char bits[64];
    unsigned int d=b;   
    unsigned int k=0;
    while(d>0)
    {
        bits[k]=d%2;
        k++;        
        d/=2;
    }
    d=1;
    for(unsigned int i=k-1;i>-1;i--)
    {
        d=(d*d)%n;
        if(bits[i]==1) d=(d*a)%n;
    }
    return d;
}
 
bool Witness(unsigned int a,unsigned int n)
{
    bool flag=false;
    unsigned int t=1;
    unsigned int u=(n-1)/2;
    unsigned int *x;
    unsigned int p=1<<t;
    while(u%2==0)
    {
        u=(n-1)/p;
        t++;
        p=1<<t;     
    }
    x=new unsigned int[t+1];
    x[0]=ModExp(a,u,n);
    unsigned int i=1;
    while((i<=t)&&(flag==false))
    {
        x[i]=(x[i-1]*x[i-1])%n;
        if((x[i]==1)&&(x[i-1]!=1)&&(x[i-1]!=n-1)) flag=true;
        i++;
    }
    if(x[t]!=1) flag=true;
    delete []x;
    return flag;    
}
 
bool Miller_Rabin(unsigned int n,unsigned int s)
{
    for(unsigned int i=0;i<s;i++)
    {
        int a=rand()%(n-1)+1;
        if(Witness(a,n)==true) return false;//составное
    }
    return true;//простое
}
 
bool IsPrime(int d)
{
    bool flag=false;
    if((d>1)&&(d<1000000))
    {
        flag=true;
        int k=floor(sqrt(d*1.0));
        int i=2;
        while((i<=k)&&(flag==true))
        {
            if(d%i==0) flag=false;
            i++;
        }
    }
    else flag=Miller_Rabin(d,5);
    return flag;
}
 
int main()
{
    srand(time(0));
    __int64 sum=0;
    const unsigned int N=1073741824;
    for(unsigned int i=0;i<=N;i++) 
        if(IsPrime(i)==true) sum+=i;        
    cout<<sum<<endl;
    getchar();
    return 0;
}
Результата я не дождался
 
Текущее время: 19:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru