目錄
問題陳述
Example
範例 1
問題陳述的解決方案
方法一:暴力解法
虛擬程式碼
輸出
使用牛頓拉弗森方法的方法2
結論
首頁 後端開發 C++ 平方金字塔數(平方和)

平方金字塔數(平方和)

Sep 04, 2023 pm 11:57 PM
數位 平方 金字塔

平方金字塔數(平方和)

一個平方金字塔數是指自然數的平方和。自然數包括從1到無窮大的所有數字。例如,前4個平方金字塔數分別為1、5、14、30。

為了更好地理解,請考慮以下事實:如果我們以一開始的平方金字塔數為基礎,將數字球堆疊在降序中,它們會形成一個金字塔。

問題陳述

給定一個數Sum。如果Sum是前n個自然數的平方和,則回傳n,否則回傳false。

Example 1

的翻譯為:

範例 1

Input = 30
Output = 4
登入後複製

Explanation = 30是前4個自然數的平方和。

1*1 + 2*2 + 3*3 +4*4 = 30.
登入後複製

因此,輸出應該是4。

Example 2

Input = 54
Output = -1
登入後複製

Explanation = 沒有任何n個自然數的平方和等於54。因此,輸出應該是-1。

問題陳述的解決方案

這個問題有兩個解決方案。

方法一:暴力解法

暴力破解方法是從n = 1開始。建立一個變數'total',將下一個自然數的平方加到total的前一個值。如果total等於Sum,則傳回n,否則,如果total大於Sum,則傳回false。

虛擬程式碼

start
n =1 
While (total < sum ):
   Total += n*n
   n=n+1
if(total == sum) : 
   Return n
Else:
   Return false
end
登入後複製

Example

下面是一個C 程序,用於檢查給定的數字是否是自然數的平方數總和。

#include <iostream>
using namespace std;
// This function returns n if the sum of squares of first 
// n natural numbers is equal to the given sum
// Else it returns -1
int square_pyramidal_number(int sum) {
   // initialize total
   int total = 0;
   // Return -1 if Sum is <= 0
   if(sum <= 0){
      return -1;
   }
   
   // Adding squares of the numbers starting from 1
   int n = 0;
   while ( total < sum){
      n++;
      total += n * n;
   }
   
   // If total becomes equal to sum return n
   if (total == sum)
   return n;
   
   return -1;
}
int main(){
   int S = 30;
   int n = square_pyramidal_number(S);
   cout<< "Number of Square Pyramidal Numbers whose sum is 30: "<< endl;
   (n) ? cout << n : cout << "-1";
   return 0;
}
登入後複製

輸出

Number of Square Pyramidal Numbers whose sum is 30: 
4
登入後複製

時間複雜度 - O(sum),其中sum是給定的輸入。

空間複雜度 - O(1):沒有使用額外的空間。

使用牛頓拉弗森方法的方法2

另一種方法是牛頓拉夫遜法。 牛頓拉夫遜法 用來找出給定函數 f(x) 的根和一個根的初始猜測。

sum of squares of first n natural numbers = n * (n + 1) * (2*n + 1) / 6, 

n * (n + 1) * (2*n + 1) / 6 = sum or 

k * (k + 1) * (2*k + 1) – 6*sum = 0
登入後複製

所以n是這個三次方程式的根,可以使用牛頓-拉弗森方法來計算,該方法涉及從初始猜測值x0開始,使用下面的公式來找到下一個值x,即從先前的值xn得到的xn 1。

$$\mathrm{x_{1}=x_{0}-\frac{f(x_{0})}{f^{'}(x_{0})}}$$

虛擬程式碼

Start
calculate func(x) and derivativeFunction(x) for given initial x
Compute h: h = func(x) / derivFunc(x)
While h is greater than allowed error ε 
   h = func(x) / derivFunc(x)
   x = x – h
If (x is an integer):
   return x
Else:
   return -1;
end
登入後複製

Example

下面是一個C 程序,用於檢查一個給定的數字是否是自然數的平方和。

#include<bits/stdc++.h>
#define EPSILON 0.001
using namespace std;
// According to Newton Raphson Method The function is
// k * (k + 1) * (2*k + 1) – 6*sum or 2*k*k*k + 3*k*k + k - 6*sum                  
double func(double k, int sum){
   return 2*k*k*k + 3*k*k + k - 6*sum;
}
// Derivative of the above function is 6*k*k + 6*k + 1
double derivativeFunction(double k){
   return 6*k*k + 6*k + 1;
}
// Function to check if double is an integer or not
bool isInteger(double N){
   int X = N;
   double temp2 = N - X;
   if (temp2*10 >=1 ) {
      return false;
   }
   return true;
}
// Function that finds the root of k * (k + 1) * (2*k + 1) – 6*sum
int newtonRaphson(double k, int sum){
   double h = func(k, sum) / derivativeFunction(k);
   while (abs(h) >= EPSILON){
      h = func(k, sum)/derivativeFunction(k);
      // k(i+1) = k(i) - f(k) / f'(k)
      k = k - h;
   }
   if (isInteger(k)) {
      return (int)k;
   }
   else {
      return -1;
   }
}
// Driver program
int main(){
   double x0 = 1; // Initial values assumed
   int sum = 91;
   int n = newtonRaphson(x0,sum);
   cout<< "Number of Square Pyramidal Numbers whose sum is 91: "<< endl;
   (n) ? cout << n : cout << "-1";
   return 0;
}
登入後複製

輸出

Number of Square Pyramidal Numbers whose sum is 91: 
6
登入後複製

Time Complexity - O((log n) F(n)) where F(n) is the cost of calculating f(x)/f'(x), with n-digit precision.

空間複雜度 - O(1):沒有使用額外的空間。

結論

本文解決了找到給定和的平方金字塔數的問題。我們介紹了兩種方法:一種是蠻力方法,另一種是高效方法。這兩種方法都提供了C 程式。

以上是平方金字塔數(平方和)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

手機上怎麼輸平方2m³「詳細介紹:平方和立方符號輸入方法」 手機上怎麼輸平方2m³「詳細介紹:平方和立方符號輸入方法」 Feb 07, 2024 am 08:31 AM

手機上怎麼輸平方2m³「詳細介紹:平方和立方符號輸入方法」

自然數的平方平均值? 自然數的平方平均值? Sep 20, 2023 pm 10:29 PM

自然數的平方平均值?

C程式用來求出一個數的最大質因子 C程式用來求出一個數的最大質因子 Aug 27, 2023 am 10:09 AM

C程式用來求出一個數的最大質因子

Excel平方怎麼打 Excel平方怎麼打 Mar 20, 2024 am 11:10 AM

Excel平方怎麼打

使用C++編寫程式碼,找到第N個非平方數 使用C++編寫程式碼,找到第N個非平方數 Aug 30, 2023 pm 10:41 PM

使用C++編寫程式碼,找到第N個非平方數

全球數字虛擬幣交易平台排行榜前十(2025權威排名) 全球數字虛擬幣交易平台排行榜前十(2025權威排名) Mar 06, 2025 pm 04:36 PM

全球數字虛擬幣交易平台排行榜前十(2025權威排名)

Java程式創建金字塔和圖案 Java程式創建金字塔和圖案 Sep 05, 2023 pm 03:05 PM

Java程式創建金字塔和圖案

幣圈十大交易所2025年最新 數字貨幣app排行榜前十 幣圈十大交易所2025年最新 數字貨幣app排行榜前十 Feb 27, 2025 pm 06:33 PM

幣圈十大交易所2025年最新 數字貨幣app排行榜前十

See all articles