เราได้รับตัวเลข 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