Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าตัวเลขสามารถแสดงเป็นผลรวมของจำนวนมากมายสองจำนวนใน C++ . ได้หรือไม่


สมมติว่าเรามีตัวเลข เราต้องเขียนเป็นผลรวมของจำนวนเต็มสองจำนวน ถ้าใช่ ให้พิมพ์ตัวเลข มิฉะนั้นให้พิมพ์ -1 จำนวนกล่าวว่าเป็นจำนวนมากมายคือผลรวมของตัวหารที่เหมาะสมทั้งหมดของจำนวนซึ่งแสดงโดยผลรวม (n) มากกว่าค่าของตัวเลข

เพื่อแก้ปัญหานี้ เราจะเก็บจำนวนมากมายทั้งหมดไว้ในชุด และสำหรับจำนวนที่กำหนด n ให้รันลูปสำหรับ i =1 ถึง n และตรวจสอบว่า n และ (n – i) มีจำนวนมากเกินไปหรือไม่

ตัวอย่าง

#include <iostream>
#include <set>
#define N 100005
using namespace std;
set<int> getAbundantSet() {
   set<int> abundant_set;
   for (int i = 1; i < N; i++) {
      int sum = 1;
      for (int j = 2; j * j <= i; j++) {
         if (i % j == 0) {
            sum += j;
            if (i / j != j)
            sum += i / j;
         }
      }
      if (sum > i)
         abundant_set.insert(i);
   }
   return abundant_set;
}
void representSumAbundant(int number){
   set<int> abundant_set = getAbundantSet();
   for (int i = 1; i <= number; i++) {
      if (abundant_set.count(i) && abundant_set.count(number - i)) {
         cout << i << " " << number - i;
         return;
      }
   }
   cout << -1;
}
int main() {
   int n = 30;
   representSumAbundant(n);
}

ผลลัพธ์

12 18