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

โปรแกรมพิมพ์เลขเฉพาะในช่วงที่กำหนดโดยใช้ C++ STL


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมสำหรับพิมพ์ตัวเลขเฉพาะสำหรับช่วงตัวเลขที่กำหนดโดยใช้ไลบรารีเทมเพลตมาตรฐาน C++

ในนี้เราจะได้ตัวเลขสองตัวคือ a และ b งานคือการพิมพ์เลขเฉพาะที่กำลังมาทั้งหมดในช่วงนี้ สำหรับสิ่งนี้ เราจะใช้วิธี Sieve of Eratosthenes โดยเรียกใช้เป็นรูทีนย่อย ในเวลาเดียวกัน เราจะเก็บจำนวนเฉพาะทั้งหมดไว้ในเวกเตอร์ และสุดท้ายก็พิมพ์ออกมาทั้งหมด

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long int unll;
vector<unll> eratosthemes(unll n){
   vector<bool> prime_num(n+1,true);
   prime_num[0] = false;
   prime_num[1] = false;
   int m = sqrt(n);
   for (unll p=2; p<=m; p++){
      if (prime_num[p]){
         for (unll i=p*2; i<=n; i += p)
            prime_num[i] = false;
      }
   }
   vector<unll< elements;
   for (int i=0;i<n;i++)
   if (prime_num[i])
      elements.push_back(i);
   return elements;
}
bool check_zero(unll i){
   return i == 0;
}
vector<unll> sieve_range(unll start,unll end){
   vector<unll> s1 = eratosthemes(start);
   vector<unll> s2 = eratosthemes(end);
   vector<unll> elements(end-start);
   set_difference(s2.begin(), s2.end(), s1.begin(),
   s2.end(), elements.begin());
   vector<unll>::iterator itr =
   remove_if(elements.begin(),elements.end(),check_zero);
   elements.resize(itr-elements.begin());
   return elements;
}
int main(void){
   unll start = 10;
   unll end = 90;
   vector<unll> elements = sieve_range(start,end);
   for (auto i:elements)
   cout<<i<<' ';
   return 0;
}

ผลลัพธ์

11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89