# Solving Leetcode Interviews in Seconds with AI: Maximum Element-Sum of a Complete Subset of Indices


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "2862" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> You are given a 1-indexed array nums. Your task is to select a complete subset from nums where every pair of selected indices multiplied is a perfect square,. i. e. if you select ai and aj, i * j must be a perfect square. Return the sum of the complete subset with the maximum sum.   Example 1:  Input: nums = [8,7,3,5,7,2,4,9] Output: 16 Explanation: We select elements at indices 2 and 8 and 2 * 8 is a perfect square.  Example 2:  Input: nums = [8,10,3,8,1,13,7,9,4] Output: 20 Explanation: We select elements at indices 1, 4, and 9. 1 * 4, 1 * 9, 4 * 9 are perfect squares.    Constraints:  1 <= n == nums.length <= 104 1 <= nums[i] <= 109  

	# Explanation
	Here's a solution to the problem, combining efficiency and clarity:

*   **Core Idea:** Group indices based on their square-free part. If `i * j` is a perfect square, then `i` and `j` must have the same square-free part. Maximize the sum by selecting the elements in the group with the largest sum.
*   **Square-Free Part:** To find the square-free part of a number, repeatedly divide it by the square of each prime number until it is no longer divisible by any square of prime. Example: squareFree(12) = 3, because 12 = 2^2 * 3.
*   **Optimization:** Precompute the square-free parts of all indices to avoid redundant calculations.

*   **Complexity:** *O(n log n)* time complexity, *O(n)* space complexity. The *O(n log n)* comes from calculating the square-free numbers from 1 to n.

	
	# Code
	```python
	from collections import defaultdict
import math

def solve():
    n = int(input())
    nums = list(map(int, input().split()))

    def square_free(x):
        res = x
        for i in range(2, int(math.sqrt(x)) + 1):
            if i * i > x:
                break
            while res % (i * i) == 0:
                res //= (i * i)
        return res

    groups = defaultdict(int)
    for i in range(n):
        groups[square_free(i + 1)] += nums[i]

    max_sum = 0
    for group_sum in groups.values():
        max_sum = max(max_sum, group_sum)

    print(max_sum)

# Example Usage: (Read input from stdin to adhere to the problem's input style)
# n = int(input())
# nums = list(map(int, input().split()))

#The function solve() is used to handle standard input and output.
#For direct testing with example test cases define n and nums directly.

def max_subset_sum_perfect_square(nums):
    n = len(nums)

    def square_free(x):
        res = x
        for i in range(2, int(math.sqrt(x)) + 1):
            if i * i > x:
                break
            while res % (i * i) == 0:
                res //= (i * i)
        return res

    groups = defaultdict(int)
    for i in range(n):
        groups[square_free(i + 1)] += nums[i]

    max_sum = 0
    for group_sum in groups.values():
        max_sum = max(max_sum, group_sum)

    return max_sum
	```
			
