การบวกจำนวนธรรมชาติจนถึง n ที่หารด้วย X หรือ Y ลงตัว คือการเลือกตัวเลขที่หารลงตัวแล้วบวกเก็บในตัวแปร sum
มี 2 วิธี
- ใช้ลูปและเงื่อนไข
- ใช้สูตร
วิธี 1 - ใช้ลูปและเงื่อนไข
ใช้ลูปนับจนถึง n เลือกตัวเลขที่หารด้วย X หรือ Y ลงตัว บวกเก็บในตัวแปร
โค้ดตัวอย่าง
#include <stdio.h> int main(void) { int n = 54; int x = 2; int y = 5; int sum = 0; for(int i = 0; i<= n; i++) { if(i%x == 0 || i%y == 0) sum = sum + i; } printf("sum of %d natural numbers divisible by %d and %d is %d",n,x,y,sum); return 0; }ผลลัพธ์
sum of 54 natural numbers divisible by 2 and 5 is 881
วิธี 2 - ใช้สูตร
ใช้สูตรหาผลรวม n ตัวแรกที่หารด้วยตัวเลขใดตัวเลขหนึ่งลงตัว
สูตร: Sn/x = ((n/x)/2) × (2 × x + (n/x - 1) × x)
หาผลรวมหารด้วย x: Sn/x = ((n/x)/2) × (2 × x + (n/x - 1) × x)
หาผลรวมหารด้วย y: Sn/y = ((n/y)/2) × (2 × y + (n/y - 1) × y)
หาผลรวมหารด้วย x และ y: Sn/x*y = ((n/(x*y))/2) × (2 × (x*y) + (n/(x*y) - 1) × (x*y))
นำผลรวม x และ y มาบวกกัน ลบผลรวม x*y ที่ถูกบวกซ้ำ
โค้ดตัวอย่าง
#include <stdio.h> int main() { int n = 54; int x = 2, y = 5; int Sx, Sy, Sxy, sum; Sx = ((n / x)) * (2 * x + (n / x - 1) * x) / 2; Sy = ((n / y)) * (2 * y + (n / y - 1) * y) / 2; Sxy= ((n / (x * y))) * (2 * (x * y) + (n / (x * y) - 1) * (x * y))/ 2; sum = Sx + Sy - Sxy; printf("sum of %d natural numbers divisible by %d and %d is %d",n,x,y,sum); return 0; }ผลลัพธ์
sum of 54 natural numbers divisible by 2 and 5 is 881
วิธีที่ 2 ดีกว่าเพราะไม่ใช้ลูป complexity ดีกว่า แต่ถ้าข้อมูลน้อย วิธีแรกก็ใช้ได้ สำหรับข้อมูลมาก วิธีที่ 2 ไม่ใช่ตัวเลือกที่ดีที่สุด