Nieskracalne ułamki - c++ - pomocy!

0

Proszę o pomoc, mam zadanie, w którym mam obliczyć tak na prawdę wartość funkcji Eulera (fi).
Napisałem coś takiego, ale jest to chyba źle:

#include <iostream>


using namespace std;
int main()
{
 int t;
 cin >> t;
 while (t--)
 {
       int n,a=2,p=1,q=1,wynik,n1,wynik1;
       cin >> n;
       n1=n;
       if (n==1)
       {
                wynik1=0;
                cout << wynik1;
                break;
       }
       else
       {
       while (a<=n)
       {
             if (n%a==0)
             {
                        p=p*a;
                        q=q*(a-1);
                        while (n%a!=0)
                        {
                              n=n/a;
             
                        }
             }
             else 
             a=a++;
       }
       }
       q=q*n1;
       wynik=q/p;
       cout << wynik << endl;
                                        
}
 system("PAUSE");
 return 0;
}
0

mi się wydaje, że to dlatego, że nie operujesz na liczbach zmiennoprzecinkowych, tylko na intach -

0
  1. funkcja Eulera zlicza ilość liczb względnie pierwszych mniejszych od danej liczby, więc operacje powinny być wykonane na typie całkowitym
  2. Kod należy pisać czytelnie
    a. porządne wcięcia kodu, by wyraźnie było widać logikę (nie jest źle, ale mogło by być lepiej)
    b. oddzielną logikę powinno się umieszczać w osobnych funkcjach. Podziel kod na funkcje: int funkjcaEuleraFi(int n) i bool wzgledniePierwsze(int a, int b);, będzie ci łatwiej rozumieć własny kod i znaleźć potencjalne błędy
  3. używaj debuggera a zaraz rozwiążesz ten problem sam.

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