
11.11.2009, 18:07
|
|
Познающий
Регистрация: 13.05.2009
Сообщений: 40
С нами:
8945711
Репутация:
1
|
|
Я по поводу теста простоты Миллера-Рабина(см. выше). Переписал с учётом замечаний, но по прежнему не работает
Код:
bool is_prime(int m){
using namespace std;
int r = 1000;
int t = m-1;
int s = 0;
bool b = true;
if(m==2){
return true;
}
if(m%2==0){
return false;
}
if(m==1){
return false;
}
while(t%2==0 || b){
b = false;
s++;
t=t/2;
}
for(int i=1;i<r+1;i++){
int a = 2+rand()%(m-2);
int x = int(float(pow(float(a),float(t))))%m;
if((x==1)||(x==m-1)){
continue;
}
for(int j=1;j<s;j++){
x=int(float(pow(float(x),2)))%m;
if(x==1){
return false;
}
if(x==m-1){
break;
}
return false;
}
}
return true;
}
|
|
|