Liczby względnie pierwsze

0

Mam z informatyki zadanie domowe polegające na napisaniu programu, który określa czy podana przez użytkownika para liczb jest względnie pierwsza. Napisałem tak:

 #include<iostream>
using namespace std;
int main()
{
int a,b,c,d,ubunt=0;
int at[35];
int bt[35];
cin>>a>>b;

for(int i=1; i<=a; i++)
{

	if (a%i==0) {at[i]=i; c++;}

}

for(int j=1; j<=b; j++)
{

	if (b%j==0) {bt[j]=j; c++;}

}

for(int k=1; k<=c; k++)
{
	for(int l=1; l<=d; l++) if (at[k]==bt[l]) ubunt++;
}
if (ubunt==0) cout<<"Liczby sa wzglednie pierwsze";
else cout<<"Nie sa";
return 0;
} 

Niestety program po podaniu mu liczb "wykrzacza" się i w konsoli pokazuje się komunikat "Naruszenie ochrony pamięci". Próbowałem już wielu sposobów i cały czas to samo. Jaki popełniłem błąd?

0
    int a,b;
    cin>>a>>b;
    if(a!=1 && b!=1)
        while(a!=b)
        {
            if(a>b)
                a-=b;
            else
                b-=a;
        }
    if(a==1 || b==1)
        cout<<"TAK";
    else
        cout<<"NIE";
0

Mi ten powyższy link nie działa, więc nie wiem, może powtórzę to co tam akurat pisze, ale trudno.

Jeżli chodzi o temat. Liczby a i b są względnie pierwsze, jeżeli NWD(a,b) = 1. NWD można w miarę szybko obliczyć stosując algorytm Euklidesa. Nie wiem na jakim etapie matematyki jesteś, ogólnie o tym algorytmie łatwo znajdziesz informacje w sieci np. tu. Byłem przed chwilą na stronie gdzie był dziwny schemat blokowy (jakieś odejmowanie liczb, zamiast dzielenia modulo), więc trzeba też uważać. A o dziwo był to portal strikte z algorytmami, nie spodziwałbym się czegoś takiego..

0
#include <iostream>

int nwd(int a, int b) {
    return 0 == b ? a : nwd(b, a % b);
}

int main() {
    int a, b;
    std::cin >> a >> b;
    std::cout << ((1 == nwd(a, b)) ? "sa wzglednie pierwsze" : "nie sa wzglednie pierwsze");
    return 0;
}

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