Test pierwszości - problem z plikiem wykonywalnym

0

Witam!
Jestem początkujący... napisałem sobie program sprawdzający, czy dana liczba jest pseudo pierwsza:

#include<iostream>
#include <conio.h>
#include<math.h>
#include<time.h>
using namespace std;
 
int main()
{
srand(time(NULL));
int a, b, c, d; // a - świadek pierwszości (dokładność), b - zmienna pomocnicza, c - liczba do sprawdzenia, d - losowana liczba
unsigned long int x; // x = a^(p-1), gdzie a jest losowane w każdym obiegu
 
cout << "Podaj liczbe do sprawdzenia: ";
cin >> c;
cout << "Podaj dokladnosc: ";
cin >> a;
 
for (b = 0; b < a; b++)
{
d = (rand()%(c-1))+1; // losujemy liczbe a
x = ((unsigned long int)pow((float)d, c-1)); // obliczamy x = d^(c-1) 
  if (x%c != 1) // obliczamy modulo
      { 
       cout << "Liczba " << c << " nie jest liczba pierwsza" << endl;
       break;
      }
}
if (b == a) // jezeli wyszlismy z petli przez nie spelnienie warunku b < a, a nie przez break'a w ifie to liczba jest prawdopodobnie pierwsza
cout << "Liczba " << c << "prawdopodobnie jest pierwsza, z dokładnością: " << a << endl;
getch(); 
return 0;
}

Problem jest tego typu, że napisałem to w DevC++, kod się kompiluje, ale nie jest tworzony plik exe i nie mam pojęcia dlaczego!
Komunikaty jakie wywala mi DevC++ po kompilacji:

  • C:\Users\MICHAL\Desktop\Makefile.win [Build Error] [pseudo] Error 1,
  • ld returned 1 exit status,
  • Permission denied.

Byłbym wdzięczny za wyjaśnienie ciemnemu ludowi (mnie):), o co chodzi. Pozdrawiam.

0

Odinstaluj deva. Zainstaluj Code::Blocks. Problem zniknie.

0

Ok, spróbuję z Code Blocks:). Tak na marginesie Dev - dewiant, wielu rzeczy nie akceptuje...

0

Code Blocks nawet skompilować tego nie chce. Zainstalowałem 32 bit -owy program na 64 bit-owym Win 7, czy tu może być błąd??

0

OK, poradziłem sobie już z problemem. Temat do zamknięcia:)

0

jaka szkoda, że ten kawałek kodu jest do d....

d = (rand()%(c-1))+1; // losujemy liczbe a
x = ((unsigned long int)pow((float)d, c-1)); // obliczamy x = d^(c-1) 
  if (x%c != 1) // obliczamy modulo
      { 
       cout << "Liczba " << c << " nie jest liczba pierwsza" << endl;
       break;
      }
}
0

Hmmmm... nie ma to jak konstruktywna krytyka. Jak masz tutaj wielkiego "znaffcę" udawać, to lepiej sobie daruj. Bo pomocy to bym się raczej nie spodziewał...

0

a jeżeli wylosujesz tak, że d==1
a jeżeli wylosujesz d==c
bez znaczenia jakie jest c wyjdzie że jest pierwsze
zapomniałeś o jeszcze jednym warunku przy tym teście

potęgujesz funkcją pow(), możesz liczyć nawet (c-1)^(c-1), powiedzmy, że c==18
17^17=827240261886336764177, ta liczba ma 70 bitów, sądzisz, że otrzymasz poprawny wynik?

0

I ty na serio pamiętasz czym jest a, b czy c w tym kodzie? Czemu po prostu ich sensownie nie nazwać? Używanie nazw zmiennych dłuższych niż jeden znak naprawdę nie jest zarezerwowane dla zaawansowanych programistów. :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1