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

ค้นหาฝาแฝดที่ใหญ่ที่สุดในช่วงที่กำหนดใน C++


ในปัญหานี้ เราได้รับค่าสองค่า lValue และ hValue งานของเราคือ ค้นหาฝาแฝดที่ใหญ่ที่สุดในช่วงที่กำหนด .

ตัวเลข 2 ตัวจะเป็นเลขคู่หากทั้งสองจำนวนเป็นจำนวนเฉพาะและผลต่างระหว่างตัวเลขทั้งสองคือ 2

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

Input : lValue = 65, rValue = 100
Output : 71, 73

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาอย่างง่ายคือการวนลูปจาก rValue - 2 ถึง lValue แล้วตรวจสอบแต่ละคู่ของ i และ (i+2) เพื่อหาฝาแฝดและพิมพ์แฝดที่เกิดครั้งแรก

แนวทางอื่น คือการหาจำนวนเฉพาะทั้งหมดในช่วงนั้นแล้วตรวจสอบหาคู่ที่ใหญ่ที่สุดของ i และ (i+2) ที่เป็นจำนวนเฉพาะและ

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#include <bits/stdc++.h>
using namespace std;
void findLargestTwins(int lValue, int uValue) {
   bool primes[uValue + 1];
   memset(primes, true, sizeof(primes));
   primes[0] = primes[1] = false;
   for (int p = 2; p <= floor(sqrt(uValue)) + 1; p++) { 
      if (primes[p]) {
         for (int i = p * 2; i <= uValue; i += p)
         primes[i] = false;
      }
   }
   int i;
   for (i = uValue; i >= lValue; i--) {
      if (primes[i] && (i - 2 >= lValue && primes[i - 2] == true)) {
         break;
      }
   }
   if(i >= lValue )
      cout<<"Largest twins in given range: ("<<(i-2)<<", "<<i<<")";
   else 
      cout<<"No Twins possible";
}
int main(){
   int lValue = 54;
   int uValue = 102;
   findLargestTwins(lValue, uValue);
   return 0;
}

ผลลัพธ์

Largest twins in given range: (71, 73)