Autor Wiadomość
Ricko
PostWysłany: Nie 12:20, 24 Kwi 2011    Temat postu: C++ Rozszerzony Euklides + Równanie Diofantyczne

Rozszerzony Algorytm Euklidesa + Równanie Liniowe Diofantyczne

Źródło: Praca własna na podstawie pseudokodu i informacji z internetu dotyczących funkcjonowania algorytmu

Cytat:
#include<iostream>

using namespace std;

int main () {
int a,b,d,r1,r2;
float u,v,u1,u2,q,p1,p2;

cout<<"POBIERANIE DANYCH"<<endl<<"Podaj dwie liczby, z ktorych chcesz wyliczyc NWD"<<endl;
cin>>a>>b;


cout<<endl<<"WYKONYWANIE PROGRAMU"<<endl;

u1=1;
r1=a;
u2=0;
r2=b;

while (r2>0)
{
q=r1/r2;

p1=u1; //zmienna pomocnicza dla u//
u1=u2;
p2=r1; //zmienna pomocnicza dla r//
r1=r2;
u2=p1-q*u2;
r2=p2-q*r2;
}

d=r1;
u=u1;
v=(r1-u1*a)/b;

cout<<"NWD wynosi "<<d<<endl<<"u i v wynosza "<<u<<" "<<v<<endl<<endl<<"ZAKONCZONO DZIALANIE ROZSZERZONEGO ALGORYTMU EUKLIDESA"<<endl;

system("pause");

cout<<endl<<"ROWNANIE LINIOWE DIOFANTYCZNE"<<endl;

int c,t,x,y;

cout<<"Podaj c"<<endl;
cout<<"c= ";
cin>>c;
cout<<"Podaj wspolczynnik t"<<endl;
cout<<"t= ";
cin>>t;

if (c%d==0)
{
x=((c*u)/d)+(t*(b/d));
y=((c*v)/d)-(t*(a/d));
cout<<"X wynosi: "<<x<<", Y wynosi: "<<y<<endl;
}
else
cout<<endl<<"Brak rozwiazan"<<endl<<endl;

system("pause");

return 0;
}

Powered by phpBB © 2001,2002 phpBB Group