witam,
mam pytania odnośnie mojego kodu, próbuję zaimplementować test Millera Rabina. Jak postawić te 2 warunki w pętli aby na ekranie pokazywało że jest to liczba złożona jeśli są one spełnione dla każdego r, lub liczba pierwsza gdy jeden z nich nie jest ?
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>a
using namespace std;
int main(){
unsigned int seed = time(NULL);
srand(time(0));
long long int n; // sprawdzana liczba
int p=0; // max potega liczby 2
int d; // dopelniene
int a;
int s;
int k; //ilosc powt
//if(n%2=0) n=n-1; //jesli jest parzysta
cout << "Podaj liczbe nieparzysta : " ;
cin >> n;
cout << "Podaj liczbe powtorzen : " ;
cin >> k;
long long int n1=n;
while( n1 >= 2 ){ n1=n1/2 ; p++ ;}
// cout << "Max potega 2^ : " << p << endl;
//cout << pow(potega,wykladnik); funkcja do potegowania
for(int i=p;i>=1;i--){
if((n-1)%((int)pow(2,i))==0){ s = i ; break ; }
}
//cout << "s = " << s << endl ;
d = n / (int)pow(2,s);
//cout << "d = " << d << endl;
for(int j=0;j<k;j++){
int l=0;
int l1=1;
a = rand()%(n-1)+1;
if( ((int)pow(a,d)) %n != 1 ){
l=1;
for(int r=0;r<=s-1;r++){
int d2r = ((int)pow(2,r))*d;
if( ((int)pow(a,d2r)) % n != n-1 ) { } else { l1=0 ; break ; }
} // r
} else { break ; }
if (l==l1) {cout << "zlozona !" << endl ; } else { cout << "pierwsza" << endl; }
}// liczba k
cout << endl ;
system("PAUSE");
return 0;
}