เราได้รับตัวเลข N เป้าหมายคือการหาคู่ที่เรียงลำดับของจำนวนบวกซึ่งผลรวมของลูกบาศก์ของมันคือ N
แนวทางที่ไร้เดียงสา
สำรวจตัวเลขทั้งหมดตั้งแต่ 1 ถึง N และตรวจสอบว่าเป็นกำลังสองสมบูรณ์หรือไม่ ถ้า floor(sqrt(i))==ceil(sqrt(i)).
จากนั้นตัวเลขจะเป็นกำลังสองสมบูรณ์
แนวทางที่มีประสิทธิภาพ
กำลังสองสมบูรณ์ด้านล่าง N สามารถพบได้โดยใช้สูตร:floor(sqrt(N))
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
N=20
ผลผลิต
Count of square numbers: 4 Count of non-square numbers: 16
คำอธิบาย
Square numbers are 1, 4, 9 and 16. Rest all are non-squares and less than 20.
ป้อนข้อมูล
N=40
ผลผลิต
Count of square numbers: 6 Count of non-square numbers: 34
คำอธิบาย
Square numbers are 1, 4, 9, 16, 25, 36. Rest all are non-squares and less than 40.
แนวทางที่ไร้เดียงสา
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราหาจำนวนเต็ม N.
-
ฟังก์ชัน squareNums(int n) รับ n และส่งกลับจำนวนตัวเลขที่ต่ำกว่า n ซึ่งเป็นกำลังสองสมบูรณ์หรือไม่ใช่กำลังสอง
-
นับตัวแปรเริ่มต้นเป็น 0
-
สำรวจโดยใช้ลูปจาก i=1 ถึง i<=n
-
ถ้า floor(sqrt(i))==ceil(sqrt(i)) แสดงว่าจำนวนนั้นเป็นกำลังสองสมบูรณ์ ดังนั้นให้นับจำนวนที่เพิ่มขึ้น
-
เมื่อสิ้นสุดการวนซ้ำทั้งหมด การนับจะมีจำนวนรวมที่เป็นกำลังสองสมบูรณ์
-
N-squares จะเป็นตัวเลขที่ไม่ใช่กำลังสอง
ตัวอย่าง
#include <bits/stdc++.h> #include <math.h> using namespace std; int squareNums(int n){ int count = 0; for (int i = 1; i <= n; i++){ if(floor(sqrt(i))==ceil(sqrt(i))) { count++; } } return count; } int main(){ int N = 40; int squares=squareNums(N); cout <<endl<<"Count of squares numbers: "<<squares; cout <<endl<<"Count of non-squares numbers: "<<N-squares; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of squares numbers: 6 Count of non-squares numbers: 34
แนวทางที่มีประสิทธิภาพ
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราหาจำนวนเต็ม N.
-
ใช้ตัวแปรสี่เหลี่ยม =floor(sqrt(N))
-
สี่เหลี่ยมแปรผันจะมีกำลังสองสมบูรณ์จำนวนหนึ่งต่ำกว่า N
-
N-squares จะเป็นจำนวนของ non-squares ที่ต่ำกว่า N.
ตัวอย่าง
#include <bits/stdc++.h> #include <math.h> using namespace std; int main(){ int N = 40; int squares=floor(sqrt(N)); cout <<endl<<"Count of squares numbers: "<<squares; cout <<endl<<"Count of non-squares numbers: "<<N-squares; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of squares numbers: 6 Count of non-squares numbers: 34