Nieskracalne ułamki - c++ - pomocy!

Odpowiedz Nowy wątek
2011-03-31 19:48
Maks
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;
}
edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-04-01 00:49
0

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

Pozostało 580 znaków

2011-04-01 10:00
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.

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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