Witam, pisze program sprzawdzajcy czy dana liczba jest liczba pierwszą, sprawdzając i licząc jej dzielniki. Program nie chce sie z kompilować. Nie wiem co jest źle. #include <stdio.h> #include #include
using namespace std;
void IsPrime(int Number)
{
register int CountOfDivides = 0;
thread th1([](int& CountOfDivides, int Number)->void{
for (register int i = (int)(Number*0.75); i <= (int)(Number*1); i++)
if((Number%i) == 0)
CountOfDivides++;
}(CountOfDivides, Number), CountOfDivides, Number);
thread th2([](int& CountOfDivides, int Number)->void{
for (register int i = (int)(Number*0.5); i <= (int)(Number*0.75); i++)
if((Number%i) == 0)
CountOfDivides++;
}(CountOfDivides, Number), CountOfDivides, Number);
thread th3([](int& CountOfDivides, int Number)->void{
for (register int i = (int)(Number*0.25); i <= (int)(Number*0.5); i++)
if((Number%i) == 0)
CountOfDivides++;
}(CountOfDivides, Number), CountOfDivides, Number);
thread th4([](int& CountOfDivides, int Number)->void{
for (register int i = 1; i <= (int)(Number*0.25); i++)
if((Number%i) == 0)
CountOfDivides++;
}(CountOfDivides, Number), CountOfDivides, Number);
th1.join();
th2.join();
th3.join();
th4.join();
if (CountOfDivides == 2)
printf("%8d\n", Number);
}
int main(int argc, char const *argv[])
{
register int Number = 1000000000;
IsPrime(Number);
return 0;
}
Napisałeś kod w tak nieczytelny sposób, że trochę zajęło mi ogarnięcie go i zrozumienie, tym bardziej, że nie jestem jakimś masterem C++, a wręcz przeciwnie, nawet nie do końca znam standardy C++11/14, a żeby było śmieszniej średnio na jeża ogarniam programowanie wielowątkowe. Jednak widzę prawdopodobnie błąd.
Gdy bardziej po ludzku napisze się kod jego fragment będzie wyglądał następująco:
thread th2(
[](int& CountOfDivides, int Number)->void {
for (register int i = (int)(Number*0.5); i <= (int)(Number*0.75); i++)
if((Number%i) == 0)
CountOfDivides++;
} (CountOfDivides, Number),
CountOfDivides,
Number
);
Teraz widać, że wywołujesz funkcję w miejscu gdzie powinieneś ją przekazać, niepotrzebnie masz (CountOfDivides, Number) po definicji funkcji lambda.
Druga sprawa jest taka, że powielasz 4 razy ten sam kod, tworzenie wątków powinieneś zrobić w pętli i przechowywać ich adresy w tablicy, a nie zmiennych.