Angka Sempurna — Leetcode 507
Tautan masalah asli:https://leetcode.com/problems/perfect-number/
Dalam soal ini, kita diminta untuk menentukan apakah bilangan bulat n yang diberikan adalah bilangan sempurna, yang didefinisikan sebagai bilangan bulat yang sama dengan jumlah semua pembagi positifnya (tidak termasuk n itu sendiri).
Cara paling intuitif untuk melakukan ini adalah mengulang dari 2 hingga n / 2 dan melacak jumlah yang berjalan. Namun, tidak mengherankan, hal ini memberikan batas waktu yang terlampaui pengecualian untuk jumlah yang banyak.
Jadi saya datang dengan solusi yang lebih cepat karena secara matematis, ketika kita menemukan sebuah faktor, selalu ada faktor lain yang sesuai dengannya yang juga harus menjadi bagian dari penjumlahan (misalnya jika n = 28 dan kita mulai dari 2, maka 28 / 2 = 14 juga harus menjadi faktor dan kita dapat memotong jumlah loop menjadi dua dengan cara ini karena kita dapat menutup celah lebih cepat). Ini adalah solusi yang diterima yang saya buat:
class Solution {
public boolean checkPerfectNumber(int num) {
if (num == 1) {
return false;
}
int sum = 1;
int left = 2;
int right = num / 2;
while (left < right) {
if (num % left == 0) {
sum += left;
sum += (num / left);
right = num / left;
}
left++;
}
return sum == num;
}
}

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































