Sum of Squares of Special Elements
EasyPrompt
You are given a 1-indexed integer array nums of length n.
An element nums[i] of nums is called special if i divides n, i.e. n % i == 0.
Return the sum of the squares of all special elements of nums.
Example 1:
Input: nums = [1,2,3,4]
Output: 21
Explanation: There are exactly 3 special elements in nums: nums[1] since 1 divides 4, nums[2] since 2 divides 4, and nums[4] since 4 divides 4.
Hence, the sum of the squares of all special elements of nums is nums[1] * nums[1] + nums[2] * nums[2] + nums[4] * nums[4] = 1 * 1 + 2 * 2 + 4 * 4 = 21. Example 2:
Input: nums = [2,7,1,19,18,3]
Output: 63
Explanation: There are exactly 4 special elements in nums: nums[1] since 1 divides 6, nums[2] since 2 divides 6, nums[3] since 3 divides 6, and nums[6] since 6 divides 6.
Hence, the sum of the squares of all special elements of nums is nums[1] * nums[1] + nums[2] * nums[2] + nums[3] * nums[3] + nums[6] * nums[6] = 2 * 2 + 7 * 7 + 1 * 1 + 3 * 3 = 63.
Constraints:
1 <= nums.length == n <= 501 <= nums[i] <= 50
Approaches
2 approaches with complexity analysis and trade-offs.
This approach directly translates the problem statement into code. We iterate through all possible indices from 1 to n and check if each index i is a divisor of n. If it is, we add the square of the corresponding element to a running sum.
Algorithm
- Initialize a variable
sumto 0. - Get the length of the array,
n. - Loop with an index
ifrom 1 ton. - Inside the loop, check the condition
n % i == 0. - If the condition is true, it means
iis a divisor ofn, and the elementnums[i-1](using 0-based indexing) is a "special" element. - Calculate the square of this special element,
nums[i-1] * nums[i-1], and add it tosum. - After the loop completes,
sumwill hold the total sum of squares of all special elements. Returnsum.
Walkthrough
The algorithm is straightforward:
- Initialize a variable
sumto 0. - Get the length of the array,
n. - Loop with an index
ifrom 1 ton. - Inside the loop, check the condition
n % i == 0. - If the condition is true, it means
iis a divisor ofn, and the elementnums[i-1](using 0-based indexing) is a "special" element. - Calculate the square of this special element,
nums[i-1] * nums[i-1], and add it tosum. - After the loop completes,
sumwill hold the total sum of squares of all special elements. Returnsum.
class Solution { public int sumOfSquares(int[] nums) { int n = nums.length; int sum = 0; for (int i = 1; i <= n; i++) { if (n % i == 0) { // The problem uses 1-based indexing for 'i', // so we access the array at index i-1. sum += nums[i - 1] * nums[i - 1]; } } return sum; }}Complexity
Time
O(n), where `n` is the length of the `nums` array. We iterate through all `n` possible indices to check for divisibility.
Space
O(1), as we only use a constant amount of extra space for variables like `sum` and the loop counter `i`.
Trade-offs
Pros
Very simple and easy to understand and implement.
Directly follows the problem definition.
Cons
Slightly less efficient than an approach that optimizes finding divisors, although for the given constraints (
n <= 50), the difference is negligible.
Solutions
Solution
class Solution { public int sumOfSquares ( int [] nums ) { int n = nums . length ; int ans = 0 ; for ( int i = 1 ; i <= n ; ++ i ) { if ( n % i == 0 ) { ans += nums [ i - 1 ] * nums [ i - 1 ]; } } return ans ; } }Video walkthrough
Newsletter
One sharp idea, every week
System design and interview prep — short enough to finish.
No spam. Unsubscribe anytime.
Practice
Same difficulty — related problems to reinforce the pattern.