[Proste] Wyświetl dzielniki dwóch liczb, c++


(Lisiornik) #1

Witam. Jestem żółtodziobem, więc proszę mnie nie mieszać z błotem :wink:

Napisałem coś takiego:

int a, b;

int c =1;

int d =1;

cin >> a;

cin >> b;

for(d=1;d<=b;d++){

	for(c=1;c<=a;c++){

	if(a = b * c / d){

		cout << a/c;

		cout << b/d;

		}else{}

	}

}

c=1;

}

Niestety niezbyt chce to działać, w dodatku wypisuje : do_while.cpp:14: warning: suggest parentheses around assignment used as truth value 14 linijka:

if(a = b * c / d){

Jeśli ktoś zdecydowałby się jakoś mi to wytłumaczyć, to proszę, w miarę możliwości zedytować ten program, gotowca mogę znaleźć na necie. Z góry dzięki.


(Sawyer47) #2

Sugeruje dodatkowe nawiasowanie wokół przypisania w warunku (to powszechnie stosowana praktyka). Przypisania – na pewno chodziło Ci o przypisania, czy może porównanie? W C(++) = to operator przypisania, operatorem równości jest ==.


(Lisiornik) #3

Dzięki, działa.

Poprawiony z dodanym modulo kod wygląda:

#include 

#include 

using namespace std;


int main() 

{


int a, b;

int c =1;

int d =1;


cout << "Wprowadz liczbe a ";

cin >> a;

cout << "Wprowadz liczbe b ";

cin >> b;

for(d=1;d<=b;d++){

	for(c=1;c<=a;c++){

	if(a == b*c/d and a%c==0 and b%d==0){

		cout << a/c << "\n";

		}else{}

	}

}

c=1;

}

([alex]) #4

Nie sądzę że to działa całkiem poprawnie.

Proponuję zacząć od znalezienia największego wspólnego dzielnika NWD (algorytm euklidesa).

W twoim algorytmie przy liczbach a,b w okolicach miliona nie jestem pewien czy wyrobi się w ciągu doby :smiley: