Aiuto problema giostre

L’idea credo sia giusta, ma il programma sbaglia degli output, totalizzando solamente 40/100.
Ecco il codice:

#include <bits/stdc++.h>

using namespace std;

int a, b;
bool primo[38600];
vector <int> v;

void crivello()
{
   for(int i=2; i< 35001; i++)
        primo[i] = true;
   for(int i=2; i<=sqrt(35001); i++)
   {
       if(primo[i])
       {
           for(int j= i+i; j < 35001; j+=i)
           {
               primo[j]=false;
           }
       }
   }
   return;
}



int minimoComuneDivisore(int uno, int due)
{
    unordered_set <int> divisori_uno;
    int copia = uno, indice = 0;
    while(copia > 1) // scomposizione in fattori primi (poi inseriti nell' unordered_set)
    {
        while(copia%v[indice] == 0)
        {
            copia/=v[indice];
            divisori_uno.insert(v[indice]);
        }
        indice++;
    }

    copia = due, indice = 0;
    while(copia > 1)
    {
        while(copia%v[indice] == 0)
        {
            copia/=v[indice];
            if(divisori_uno.find(v[indice]) != divisori_uno.end())
                return v[indice];
        }
        indice++;
    }
    return 1;
}

int primo_con_a() // trova il primo numero i tale che (a, i) siano primi tra loro (ovvero non hanno divisori comuni)
{
    for(int i=20; i<35000; i++)
        if(minimoComuneDivisore(a, i) == 1)
            return i;
}

int main(){
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    cin >> a >> b;

    crivello();
    for(int i=0; i< 35001; i++)
        if(primo[i])
            v.push_back(i); // vector con tutti i numeri primi minori di 35 000

    cout << a/minimoComuneDivisore(a, b) << " " << primo_con_a();
    return 0;
}

grazie in anticipo!

Che algoritmo usi per l’MCD? L’algoritmo di Euclide è molto più semplice in teoria e da implementare.

1 Mi Piace

in realtà non cerca l’MCD, bensì il minimo comune divisore (se hanno altri divisori comuni oltre ad 1, ne restituisce il minimo escludendo 1)

EDIT: ho risolto: l’ errore stava nella formula del primo intero da stampare…è meglio fare la simulazione!

Scusami allora, ho letto rapidamente la domanda :sweat_smile:

1 Mi Piace