Infix postfix prefix

 import java.util.Stack;

import java.util.Scanner;


public class ExpressionConverter {


    // Function to return precedence of operators

    static int precedence(char ch) {

        switch (ch) {

            case '+':

            case '-':

                return 1;

            case '*':

            case '/':

                return 2;

            case '^':

                return 3;

        }

        return -1; // For non-operators

    }


    // Function to convert infix to postfix

    static String infixToPostfix(String expression) {

        StringBuilder result = new StringBuilder();

        Stack<Character> stack = new Stack<>();


        for (int i = 0; i < expression.length(); i++) {

            char c = expression.charAt(i);


            // If the character is an operand, add it to the output

            if (Character.isLetterOrDigit(c)) {

                result.append(c);

            }

            // If the character is '(', push it to stack

            else if (c == '(') {

                stack.push(c);

            }

            // If the character is ')', pop from stack to output until '(' is encountered

            else if (c == ')') {

                while (!stack.isEmpty() && stack.peek() != '(') {

                    result.append(stack.pop());

                }

                if (!stack.isEmpty() && stack.peek() == '(') {

                    stack.pop(); // Discard the '('

                }

            }

            // If an operator is encountered

            else {

                // Pop operators with higher or equal precedence from the stack

                while (!stack.isEmpty() && precedence(c) <= precedence(stack.peek())) {

                    result.append(stack.pop());

                }

                stack.push(c);

            }

        }


        // Pop all the remaining operators from the stack

        while (!stack.isEmpty()) {

            result.append(stack.pop());

        }


        return result.toString();

    }

    

    // Function to convert infix to prefix

    static String infixToPrefix(String expression) {

        // The algorithm for infix to prefix is:

        // 1. Reverse the infix expression.

        // 2. Swap '(' and ')' in the reversed expression.

        // 3. Convert the modified expression to postfix.

        // 4. Reverse the resulting postfix expression to get the prefix expression.


        StringBuilder reversedInfix = new StringBuilder(expression).reverse();

        for (int i = 0; i < reversedInfix.length(); i++) {

            char c = reversedInfix.charAt(i);

            if (c == '(') {

                reversedInfix.setCharAt(i, ')');

            } else if (c == ')') {

                reversedInfix.setCharAt(i, '(');

            }

        }


        // Convert the modified string to postfix

        String postfixForReversed = infixToPostfix(reversedInfix.toString());


        // Reverse the result to get prefix

        return new StringBuilder(postfixForReversed).reverse().toString();

    }


    // Main method to test the conversion

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("Enter an infix expression (use single letters/digits and operators, no spaces, e.g., a+b*c): ");

        String infixExpression = scanner.nextLine();


        String postfix = infixToPostfix(infixExpression);

        String prefix = infixToPrefix(infixExpression);


        System.out.println("Infix Expression: " + infixExpression);

        System.out.println("Postfix Expression: " + postfix);

        System.out.println("Prefix Expression: " + prefix);

    }

}


Mersenne Number

 

Write a program to check if a number is a Mersenne number or not.

In  mathematics, a Mersenne number is a number that can be written in the form M(n) = 2n − 1 for some integer n.
The first four Mersenne primes are 3, 7, 31, and 127

Test Data
Input a number: 127

Sample Solution:

Java Code:

import java.util.Scanner;
import java.math.BigInteger;
public class Example22 {

    public static void main(String args[])
    {
        Scanner in = new Scanner(System.in);
        System.out.print("Input a number: ");
        int n = in.nextInt();
        int n1 = n + 1;

        int power = 0;
        int ans = 0;
        for(int i=0;;i++)
        {
            power=(int)Math.pow(2,i);
            if(power>n1)
            {
                break;
            }
            else if(power==n1)
            {
               System.out.println(n+" is a Mersenne number.");
               ans=1;
            }
        }
  if(ans==0)
  {
   System.out.println(n+" is not a Mersenne number.");
  }
    }
}

Sample Output:

Input a number: 127                                                                                           
127 is a Mersenne number.

Ramanujan Numbers

 

Write a Java program to find any number between 1 and n that can be expressed as the sum of two cubes in two (or more) different ways.


Here are some examples of Ramanujan numbers :
1729 = 1^3 + 12^3 = 9^3 + 10^3
* 10000
1729 = 1^3 + 12^3 = 9^3 + 10^3
4104 = 2^3 + 16^3 = 9^3 + 15^3
* 100000
1729 = 1^3 + 12^3 = 9^3 + 10^3
4104 = 2^3 + 16^3 = 9^3 + 15^3
13832 = 2^3 + 24^3 = 18^3 + 20^3
39312 = 2^3 + 34^3 = 15^3 + 33^3
46683 = 3^3 + 36^3 = 27^3 + 30^3
32832 = 4^3 + 32^3 = 18^3 + 30^3
40033 = 9^3 + 34^3 = 16^3 + 33^3
20683 = 10^3 + 27^3 = 19^3 + 24^3
65728 = 12^3 + 40^3 = 31^3 + 33^3
64232 = 17^3 + 39^3 = 26^3 + 36^3

Sample Solution:

Java Code:

import java.util.Scanner;
public class Example21  {

   public static void main(String[] args) { 

         int n = 100000;
        // for each a, b, c, d, check whether a^3 + b^3 = c^3 + d^3
        for (int a = 1; a <= n; a++) {
            int a3 = a*a*a;
            if (a3 > n) break;

            for (int b = a; b <= n; b++) {
                int b3 = b*b*b;
                if (a3 + b3 > n) break;

                 for (int c = a + 1; c <= n; c++) {
                    int c3 = c*c*c;
                    if (c3 > a3 + b3) break;

                    for (int d = c; d <= n; d++) {
                        int d3 = d*d*d;
                        if (c3 + d3 > a3 + b3) break;

                        if (c3 + d3 == a3 + b3) {
                            System.out.print((a3+b3) + " = ");
                            System.out.print(a + "^3 + " + b + "^3 = "); 
                            System.out.print(c + "^3 + " + d + "^3"); 
                            System.out.println();
                        }
                    }
                }
            }
        }
    }
}

Sample Output:

1729 = 1^3 + 12^3 = 9^3 + 10^3                                                                                
4104 = 2^3 + 16^3 = 9^3 + 15^3                                                                                
13832 = 2^3 + 24^3 = 18^3 + 20^3                                                                              
39312 = 2^3 + 34^3 = 15^3 + 33^3                                                                              
46683 = 3^3 + 36^3 = 27^3 + 30^3                                                                              
32832 = 4^3 + 32^3 = 18^3 + 30^3                                                                              
40033 = 9^3 + 34^3 = 16^3 + 33^3                                                                              
20683 = 10^3 + 27^3 = 19^3 + 24^3                                                                             
65728 = 12^3 + 40^3 = 31^3 + 33^3                                                                             
64232 = 17^3 + 39^3 = 26^3 + 36^3

Cyclic Number

WAP to check a number is cyclic number or not




 class GFG {

    // Function to generate all cyclic
    // permutations of a number
    static boolean isCyclic(long N)
    {
        // Count digits and check if all
        // digits are same
        long num = N;
        int count = 0;
        int digit = (int)(num % 10);
        boolean allSame = true;
        while (num > 0) {
            count++;
            if (num % 10 != digit)
                allSame = false;
            num = num / 10;
        }
  
        // If all digits are same, then
        // not considered cyclic.
        if (allSame == true)
            return false;
  
        // If counts of digits is even and
        // two halves are same, then the
        // number is not considered cyclic.
        if (count % 2 == 0) {
            long halfPower = (long)Math.pow(10, count / 2);
            long firstHalf = N % halfPower;
            long secondHalf = N / halfPower;
            if (firstHalf == firstHalf && isCyclic(firstHalf))
                return false;
        }
  
        num = N;
        while (true) {
            // Following three lines generates a
            // circular permutation of a number.
            long rem = num % 10;
            long div = num / 10;
            num = (long)(Math.pow(10, count - 1))
                      * rem
                  + div;
  
            // If all the permutations are checked
            // and we obtain original number exit
            // from loop.
            if (num == N)
                break;
  
            if (num % N != 0)
                return false;
        }
  
        return true;
    }
  
    // Driver code
    public static void main(String[] args)
    {
        long N = 142857;
        if (isCyclic(N))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}
  

Infix postfix prefix

 import java.util.Stack; import java.util.Scanner; public class ExpressionConverter {     // Function to return precedence of operators     ...