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

Переполнение типа. Нахождение простых чисел алгоритмом Лемана. Арифметика остатков - C++

Восстановить пароль Регистрация
 
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
11.03.2014, 20:38     Переполнение типа. Нахождение простых чисел алгоритмом Лемана. Арифметика остатков #1
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
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
#pragma argsused
int main()
{  int a,p;
  cout << "chislo dla testa: "; cin >> p ;
   a = rand() % (p-1);
  cout << "chislo a = " << a << endl ;
 //k= a ^((p-1) div 2) mod p;  - вычисляем по поэтапно
  double k0;
  k0=(p-1)/2;      // показатель степени
  int k01;
  k01 = (int) k0;       //  целая часть показателя степени (p-1) div 2
  cout<<"k01 = "<< k01 <<endl;
  int k1;
  k1=pow(a,k01);     //    возводим в степень a ^((p-1) div 2)
   cout<<"k1 = "<< k1 <<endl;
   int  k;
  k= fmod(k1,p);  // отделяем дробную часть
  cout<<"!!!!! k = "<< k <<endl;
              /*//+++++++ арифметика остатков
      double kk0;
  kk0=(p-1)/2;      // показатель степени
  int kk01;
  kk01 = (int) kk0;       //  целая часть показателя степени (p-1) div 2
  cout<<"kk01 = "<< kk01 <<endl;
    int  kk1;
  kk1= fmod(a,p);  // отделяем дробную часть     основание
    int kk2;
  kk2=pow(kk1,kk01);     //    возводим в степень a ^((p-1) div 2)
  long k;
  k= fmod(kk2,p);
  cout<<"!!!!! k = "<< k <<endl;
  //+++++++++ */
  int p01= p-1 ; // для условия
  if (k == 1) {
        cout<<"  Prostoe chislo "<< p  <<endl;
        }
        else if (k == p01 )
        {
        cout<<"  Prostoe chislo "<< p  <<endl;
        }
    else {
        cout<<" Ne prostoe chislo "<< p  <<endl;
    }
    getch(); getch();
    return 0;
}
Когда тестирую большое простое число например 3991139 функция pow в выражении k1=pow(a,k01) выдает переполнение типа.
Пробовала применить арифметику остатков не помогло...
Подскажите пожалуйста как исправить, не понимаю в чем ошибка....
Миниатюры
Переполнение типа. Нахождение простых чисел алгоритмом Лемана. Арифметика остатков  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2014, 20:38     Переполнение типа. Нахождение простых чисел алгоритмом Лемана. Арифметика остатков
Посмотрите здесь:

C++ Нахождение простых чисел в массиве
C++ Рекурсивное нахождение простых чисел
Вложенный цикл. Нахождение простых чисел C++
C++ нахождение простых чисел до заданого числа n
Нахождение простых чисел.( C++
C++ Нахождение парных простых чисел с++
C++ Целочисленная арифметика: На отрезке [A, B] подсчитать количество простых чисел
C++ Нахождение простых чисел в С++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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