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

ผลรวมของจำนวนธรรมชาติ N ตัวแรกที่หารด้วย X หรือ Y . ลงตัว


การบวกจำนวนธรรมชาติทั้งหมดไม่เกิน n ที่หารด้วย X หรือ Y ลงตัวคือการเลือกตัวเลขทั้งหมดที่หารด้วย X หรือ Y ลงตัวแล้วบวกเข้ากับตัวแปรที่เก็บผลรวมไว้

ในการหาผลรวมของจำนวนธรรมชาติ N ตัวแรกที่หารด้วย X หรือ Y ลงตัว มีสองวิธี -

  • การใช้ลูปและคำสั่งแบบมีเงื่อนไข
  • การใช้สูตร

วิธีที่ 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)

เมื่อใช้สูตรนี้ จะพบว่าผลรวมของจำนวนธรรมชาติ n ตัวหารด้วย x ได้ − S n/x =((n/x)/2) * (2 * x + (n/x - 1) * x)

การใช้สูตรนี้ จะพบผลรวมของจำนวนธรรมชาติ n ตัวหารด้วย y ได้ − S n/y =((n/y)/2) * (2 * y + (n/y - 1) * y)

ตอนนี้ ใช้สูตรนี้หาผลรวมของจำนวนธรรมชาติ n ตัวหารด้วย x และ y ได้ :S n/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

วิธีที่สองดีกว่าเพราะไม่ใช้การวนซ้ำใด ๆ ที่หมายถึงความซับซ้อนของเวลาที่ดีขึ้น แต่ถ้าอินพุตมีขนาดเล็กกว่าตัวแรกก็สามารถใช้ได้ แต่สำหรับกรณีอินพุตขนาดใหญ่ วิธีที่สองไม่ใช่ตัวเลือกที่ดีที่สุด