Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาจำนวนขั้นต่ำของค่า Log ที่จำเป็นในการคำนวณ Log upto N ใน C++


ดังที่เราทราบแล้วว่า log(x*y) =log(x) + log(y) ดังนั้นเราจะมาดูกันว่าจำนวนขั้นต่ำของค่าบันทึกที่จำเป็นในการคำนวณค่าบันทึกทั้งหมดตั้งแต่ 1 ถึง N ดังนั้นถ้า N คือ 6 ผลลัพธ์จะเป็น 3 ตั้งแต่ log(1) ถึง log(6) จะมี ต้องระบุค่าบันทึกสามค่า ยกเว้นบันทึก (1) เนื่องจาก log(1) มีค่าเป็น 0 เสมอ ดังนั้นให้ข้ามไป ตอนนี้สำหรับ log(2) และ log(3) เราต้องหา หลังจากนั้นสำหรับ log(4) นี่คือ log(2)+ log(2) แต่ค่าของ log(2) เป็นที่ทราบกันดีอยู่แล้ว ดังนั้นเราจึงไม่คำนวณสิ่งนี้อีก สำหรับ log(5) เราจำเป็นต้องคำนวณ ตอนนี้นับคือ 3 log(6) =log(3) + log(2) ทราบแล้ว ดังนั้นการนับจึงเป็น 3

ปัญหานี้สามารถลดลงได้เพื่อค้นหาจำนวนเฉพาะในช่วง 1 ถึง N ดังที่เราจะเห็นได้ว่าสำหรับจำนวนเฉพาะ เราต้องคำนวณค่าบันทึกอย่างอิสระ มิฉะนั้นเราต้องแยกตัวประกอบและคำนวณ

ตัวอย่าง

#include<iostream>
#include<vector>
#define MAX 1000005
using namespace std;
vector<int> prime(MAX, 1);
void seive(int N) {
   prime[0] = prime[1] = 0;
   for (int i = 2; i <= N; i++) {
      if (prime[i] == 1) {
         for (int j = 2; i * j <= N; j++)
         prime[i * j] = 0;
      }
   }
}
int numberOfLogs(int N) {
   int log_count = 0;
   seive(N);
   for (int i = 1; i <= N; i++) {
      if (prime[i] == 1)
      log_count++;
   }
   return log_count;
}
int main() {
   int N = 8;
   cout<<"Minimum number of log counts required: " << numberOfLogs(N)<<endl;
}

ผลลัพธ์

Minimum number of log counts required: 4