ผลรวมของจำนวนธรรมชาติ n จำนวนที่หารด้วย 2 หรือ 5 ลงตัว สามารถหาได้โดยการหาผลรวมของจำนวนธรรมชาติทั้งหมดไม่เกิน N ที่หารด้วย 2 ลงตัว และผลรวมของจำนวนธรรมชาติทั้งหมดไม่เกิน N ที่หารด้วย 5 ลงตัว แล้วนำผลบวกทั้งสองนี้มาบวกกัน แล้วลบมันด้วยผลบวกของจำนวนธรรมชาติสูงถึง N ที่หารด้วย 10 ลงตัว จะได้ผลลัพธ์ที่ต้องการ วิธีนี้เป็นวิธีที่มีประสิทธิภาพที่สามารถใช้ในการหาผลรวมของค่าขนาดใหญ่ของ n ได้
บางท่านคงกำลังคิดที่จะใช้คำสั่งแบบวนซ้ำและแบบมีเงื่อนไขแล้วบวกตัวเลขทั้งหมดที่หารด้วย 2 หรือ 5 ลงตัว แต่วิธีนี้ไม่มีประสิทธิภาพเพราะมีเวลาซับซ้อนของลำดับ n ซึ่งหมายความว่าสำหรับค่า n จำนวนมาก โปรแกรมจะรันลูป n จำนวนครั้ง และการดำเนินการนี้จะทำให้โปรแกรมหนักขึ้น
สูตรหาผลรวมของจำนวนธรรมชาติ n หารด้วย 2 ได้
Sum2 = ((n / 2) * (4 + (n / 2 - 1) * 2)) / 2
สูตรหาผลรวมของจำนวนธรรมชาติ n หารด้วย 5 ได้
Sum5 = ((n / 5) * (10 + (n / 5 - 1) * 5)) / 2
สูตรหาผลรวมของจำนวนธรรมชาติ n หารด้วย 10 ได้
Sum10 = ((n / 10) * (20 + (n / 10 - 1) * 10)) / 2
ผลลัพธ์ที่ต้องการ
Sum = Sum2 + Sum5 - Sum10
ตัวอย่าง
#include <stdio.h> int main() { int n = 25; long int sum2, sum5, sum10; sum2 = ((n / 2) * (4 + (n / 2 - 1) * 2)) / 2; sum5 = ((n / 5) * (10 + (n / 5 - 1) * 5)) / 2; sum10 = ((n / 10) * (20 + (n / 10 - 1) * 10)) / 2; long int sum = sum2 + sum5 - sum10; printf("Sum is %d", sum); return 0; }
ผลลัพธ์
Sum is 201