ในปัญหานี้ เราได้รับค่าจำนวนเต็ม 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