ในบทช่วยสอนนี้ เราต้องค้นหาว่าจำนวนธรรมชาติจาก 1 ถึง n แบ่งออกเป็นสองส่วนหรือไม่ ต้องเป็นไปตามเงื่อนไขต่อไปนี้
-
ความแตกต่างที่แน่นอนระหว่างผลรวมอนุกรมทั้งสองควรเป็น m
-
และ GCD ของผลรวมทั้งสองควรเป็น 1 นั่นคือ co-primes
ผลบวกของจำนวนธรรมชาติ n ตัวแรกคือ (n*(n+1))/2เราสามารถหา sumOne และ sumTwo ได้เนื่องจากเรามีผลรวมและส่วนต่างทั้งหมด m ดูสมการด้านล่าง
sumOne + sumTwo = (n*(n+1))/2 sumOne - sumTwo = m
ตัวอย่าง
ตรวจสอบว่าผลรวมสัมบูรณ์เท่ากับ m หรือไม่ แล้วตรวจสอบ GCD
#include <bits/stdc++.h>
using namespace std;
bool canSplitIntoTwoHalves(int n, int m) {
int total_sum = (n * (n + 1)) / 2;
int sumOne = (total_sum + m) / 2;
int sumTwo = total_sum - sumOne;
if (total_sum < m) {
return false;
}
if (sumOne + sumTwo == total_sum &&sumOne - sumTwo == m) {
return (__gcd(sumOne, sumTwo) == 1);
}
return false;
}
int main() {
int n = 10, m = 17;
if (canSplitIntoTwoHalves(n, m)) {
cout << "Can split";
}
else {
cout << "Can't split";
}
return 0;
} ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
Can split
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น