Error in return statement

Getting an error when I post to the canvas, but it works fine in Visual Studio code, does anyone know what the problem is?

Here is the error:

Exception in thread "main" java.lang.StackOverflowError
    at Phi.gcd(Phi.java:14

Here is the purpose:

The Euler similarity function, otherwise known as φ (n), measures the number of positive integers coprime to n less than n. Two numbers are coprime if their gcd is 1. For example: φ (9) = 6 because 1, 2, 4, 5, 7, and 8 are relatively simple by 9. More information about the Euller totient function can be found on this wiki page

n Relatively Prime    φ(n)
2 1   1
3 1,2 2
4 1,3 2
5 1,2,3,4 4
6 1,5 2
7 1,2,3,4,5,6 6
8 1,3,5,7 4
9 1,2,4,5,7,8 6
10    1,3,7,9 4

Write an int function phi(int n)that takes an integer nas input and returns φ (n) and a main(), which asks the user for an integer i, calls the function φ (i) and prints the result. The upper limit for entry iis 250,000.

φ (n): p1, p2,..., pm - , n.

.

Enter a positive integer n: 8
Phi(n): 4

:

import java.util.Scanner;

public class Phi {

    static int gcd(int a, int b)
    {
        if (a == 0 || b == 0)
            return 0;

        if (a == b)
            return a;

        if (a > b)
            return gcd(a-b, b);
        return gcd(a, b-a);
    }

    static int phi(int n) {
        int count=0;
        for(int i = 1; i < n; ++i) {
            if(gcd(n, i) == 1) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a positive integer n: ");;
        int n = in.nextInt();
        System.out.printf("Phi(%d): %d\n", n, phi(n));
    }

}
+4
1

, GCD GCD . , 250000 1, 250000 , , JVM .

Euclid GCD . :

int gcd(int a, int b) {
    return (b != 0) ? gcd(b, a % b) : a;
}
+9

Source: https://habr.com/ru/post/1694442/


All Articles