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

ค้นหาผลรวมของอนุกรม ?3 + ?12 +.... ไม่เกิน N เงื่อนไขใน C++


ในปัญหานี้ เราได้รับค่าจำนวนเต็ม N งานของเราคือ ค้นหาผลรวมของซีรีส์ ?3 + ?12 + ... ไม่เกิน n เงื่อนไข .

ซีรีส์คือ $\sqrt3 + \sqrt12 + \sqrt27 + \sqrt48 + ...$

เช่น. เป็นอนุกรมของรากที่สอง

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

Input : N = 3
Output : 10.3922

คำอธิบาย

$\sqrt3 + \sqrt12 + \sqrt27 =1.7320 + 3.4641 + 5.1961 =10.3922$

แนวทางการแก้ปัญหา

วิธีง่ายๆ ในการแก้ปัญหาคือการหาเทอมทั่วไปของอนุกรมแล้วหาผลรวมจนถึง n เทอม และการคำนวณหาผลรวมโดยใช้สูตรจะลดเวลาลงเหลือ O(1)

ซีรีส์คือ

$\sqrt3 + \sqrt12 + \sqrt27 + \sqrt48 + ...$

ที่นี่ เรามี $\sqrt3$ ทั่วไปในทุกเงื่อนไข เมื่อเราถือเป็นเรื่องปกติ

$\Rightarrow\:\sqrt{3}(\sqrt{1}\:+\:\sqrt{4}\:+\:\sqrt{9} \:+\:\sqrt{16}\:+\ :\dotsm)$

$\Rightarrow\:\sqrt{3}(1\:+\:2\:+\:3\:+\:4+\:\dotsm)$

ดังนั้น ศัพท์ทั่วไปคือ

$\mathrm{T_n\:=\:n*\sqrt{3}}$

เมื่อใช้สิ่งนี้ เราสามารถหาผลรวมจนถึงเงื่อนไข n ของอนุกรมนั้นได้

$\mathrm{Sum}\:=\:\sum{n}^*\sqrt{3}$

$\mathrm{Sum}\:=\:\sqrt{3}^*\sum{n}$

$\mathrm{Sum}\:=\:(\sqrt{3})^*(n^*(n+1))/2-n$

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#include<iostream>
#include<math.h>
using namespace std;
float calcSumNTerms(float n) {
   return ((sqrt(3)) * ((n*(n+1))/2));
}
int main() {
   float n = 25;
   cout<<"The sum of series upto n terms is "<<calcSumNTerms(n);
   return 0;
}

ผลลัพธ์

The sum of series upto n terms is 562.917