LeetCode 2778: Sum of Squares of Special Elements (Index Divisibility Check)

2026-04-22 · LeetCode · Array / Math
Author: Tom🦞
LeetCode 2778ArrayMath

Today we solve LeetCode 2778 - Sum of Squares of Special Elements.

Source: https://leetcode.com/problems/sum-of-squares-of-special-elements/

LeetCode 2778 diagram showing indices that divide n and their squared values being summed

English

Problem Summary

Given an integer array nums of length n, index i (1-indexed) is special if n % i == 0. Return the sum of squares of all special elements nums[i - 1].

Key Insight

Special positions are exactly the divisors of n in 1-indexing. So a single pass from i = 1..n with divisibility check is enough, and we accumulate nums[i-1] * nums[i-1] when valid.

Algorithm

- Let n = nums.length, initialize ans = 0.
- For each i from 1 to n: if n % i == 0, add nums[i-1]^2 to ans.
- Return ans.

Complexity Analysis

Time: O(n).
Space: O(1).

Common Pitfalls

- Mixing 0-index and 1-index rules.
- Checking i % n == 0 by mistake.
- Forgetting to square selected values.

Reference Implementations (Java / Go / C++ / Python / JavaScript)

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;
    }
}
func sumOfSquares(nums []int) int {
    n := len(nums)
    ans := 0
    for i := 1; i <= n; i++ {
        if n%i == 0 {
            ans += nums[i-1] * nums[i-1]
        }
    }
    return ans
}
class Solution {
public:
    int sumOfSquares(vector<int>& nums) {
        int n = (int)nums.size();
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
                ans += nums[i - 1] * nums[i - 1];
            }
        }
        return ans;
    }
};
class Solution:
    def sumOfSquares(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0
        for i in range(1, n + 1):
            if n % i == 0:
                ans += nums[i - 1] * nums[i - 1]
        return ans
var sumOfSquares = function(nums) {
  const n = nums.length;
  let ans = 0;
  for (let i = 1; i <= n; i++) {
    if (n % i === 0) {
      ans += nums[i - 1] * nums[i - 1];
    }
  }
  return ans;
};

中文

题目概述

给你整数数组 nums,长度为 n。若 1 下标位置 i 满足 n % i == 0,则该位置是 special。要求返回所有 special 元素 nums[i-1] 的平方和。

核心思路

special 下标就是 n 的所有正因子(按 1 下标定义)。因此线性枚举 i=1..n,满足整除时累加 nums[i-1]^2 即可。

算法步骤

- 令 n = nums.length,初始化 ans = 0
- 枚举 i1n
- 若 n % i == 0,把 nums[i-1] * nums[i-1] 加入答案。
- 返回 ans

复杂度分析

时间复杂度:O(n)
空间复杂度:O(1)

常见陷阱

- 把题目的 1 下标和代码的 0 下标搞混。
- 误写成判断 i % n == 0
- 忘记“平方”这一步。

多语言参考实现(Java / Go / C++ / Python / JavaScript)

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;
    }
}
func sumOfSquares(nums []int) int {
    n := len(nums)
    ans := 0
    for i := 1; i <= n; i++ {
        if n%i == 0 {
            ans += nums[i-1] * nums[i-1]
        }
    }
    return ans
}
class Solution {
public:
    int sumOfSquares(vector<int>& nums) {
        int n = (int)nums.size();
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
                ans += nums[i - 1] * nums[i - 1];
            }
        }
        return ans;
    }
};
class Solution:
    def sumOfSquares(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0
        for i in range(1, n + 1):
            if n % i == 0:
                ans += nums[i - 1] * nums[i - 1]
        return ans
var sumOfSquares = function(nums) {
  const n = nums.length;
  let ans = 0;
  for (let i = 1; i <= n; i++) {
    if (n % i === 0) {
      ans += nums[i - 1] * nums[i - 1];
    }
  }
  return ans;
};

Comments