เราได้รับตัวเลข N เป้าหมายคือการนับจำนวนไม่เกิน N ซึ่งเป็นกำลังสองสมบูรณ์และลูกบาศก์ที่สมบูรณ์แบบ ตัวอย่างเช่น 1, 64 เป็นทั้งกำลังสองสมบูรณ์และกำลังสองสมบูรณ์
เราจะใช้ sqrt() เพื่อคำนวณรากที่สองและ cbrt() เพื่อคำนวณรากที่สามของตัวเลข
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล − N=100
ผลผลิต − การนับจำนวนที่เป็นกำลังสองและลูกบาศก์ที่สมบูรณ์แบบ − 2
คำอธิบาย − 1 และ 64 เป็นเพียงตัวเลขตั้งแต่ 1 ถึง 100 ที่เป็นทั้งกำลังสองและกำลังสองที่สมบูรณ์แบบ
ป้อนข้อมูล − N=5000
ผลผลิต −จำนวนตัวเลขที่เป็นกำลังสองและลูกบาศก์ที่สมบูรณ์แบบ − 3
คำอธิบาย − 1, 64 และ 4096 เป็นเพียงตัวเลขตั้งแต่ 1 ถึง 5000 ที่เป็นทั้งกำลังสองและกำลังสองที่สมบูรณ์แบบ
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราหาจำนวนเต็ม N.
-
ฟังก์ชัน getCount(int n) รับ N และส่งกลับจำนวนตัวเลขไม่เกิน N ซึ่งเป็นทั้งกำลังสองสมบูรณ์และกำลังสองสมบูรณ์
-
นับเริ่มต้นเป็น 0
-
เริ่มจาก i=1 ถึง i=N ถ้า floor(sqrt(i))==ceil(sqrt(i)) แล้ว i เป็นสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ
-
ตอนนี้ตรวจสอบว่า floor(cbrt(i))==ceil(cbrt(i)) ถ้าจริง i เป็นลูกบาศก์ที่สมบูรณ์แบบด้วย จำนวนที่เพิ่มขึ้น
-
เมื่อสิ้นสุดการวนกลับนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int getCount(int n){
int count=0;
for(int i=1;i<=n;i++){
if(floor(sqrt(i))==ceil(sqrt(i))){
if(floor(cbrt(i))==ceil(cbrt(i))){
count++;
//cout<<i<<" ";
}
}
}
return count;
}
int main(){
int N=100;
cout<<endl<<"Numbers upto N that are perfect squares and perfect cubes:"<<getCount(N);
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Numbers upto N that are perfect squares and perfect cubes:2