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

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

โปรแกรมสำหรับพิมพ์เลขเฉพาะในช่วงที่กำหนด

อัลกอริทึม

เริ่มต้น
  ประกาศชนิดข้อมูลผู้ใช้ stl
  ประกาศ vector number ชนิด stl
  ประกาศตัวแปร a ชนิด stl
  ประกาศ vector Prime_Number ชนิด Boolean
    Prime_Number[0] = false
    Prime_Number[1] = false
  ประกาศ b ชนิด integer
    กำหนด b = sqrt(a)
  สำหรับ (stl pr=2; pr<=b; pr++)
    ถ้า (Prime_Number[pr]) แล้ว
      สำหรับ (stl i=pr*2; i<=a; i += pr)
        Prime_Number[i] = false
      จบลูป
    จบถ้า
  จบลูป
  ประกาศ result ชนิด vector
  สำหรับ (int i=0; i

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

typedef unsigned long long int stl;

vector<stl> number(stl a) {
    vector<bool> Prime_Number(a+1, true);
    Prime_Number[0] = false;
    Prime_Number[1] = false;
    int b = sqrt(a);
    for (stl pr = 2; pr <= b; pr++) {
        if (Prime_Number[pr]) {
            for (stl i = pr*2; i <= a; i += pr)
                Prime_Number[i] = false;
        }
    }
    vector<stl> result;
    for (int i = 0; i < a; i++)
        if (Prime_Number[i])
            result.push_back(i);
    return result;
}

bool remove_zero(stl i) {
    // ใช้ลบศูนย์จาก vector
    return i == 0;
}

vector<stl> Number_Range(stl First_Num, stl Last_Num) {
    vector<stl> s1 = number(First_Num); // หาเลขเฉพาะจาก 0 ถึง First_Num
    vector<stl> s2 = number(Last_Num);  // หาเลขเฉพาะจาก 0 ถึง Last_Num
    vector<stl> result(Last_Num - First_Num);
    set_difference(s2.begin(), s2.end(), s1.begin(), s2.end(), result.begin()); // หาความต่างเซต
    vector<stl>::iterator itr = remove_if(result.begin(), result.end(), remove_zero); // ลบศูนย์เกิน
    result.resize(itr - result.begin());
    return result;
}

int main(void) {
    stl First_Num = 20, Last_Num = 50;
    vector<stl> result = Number_Range(First_Num, Last_Num);
    cout << "The Prime Numbers from " << First_Num << " to " << Last_Num << " are: ";
    for (auto i : result)
        cout << i << ' ';
    return 0;
}

ผลลัพธ์

The Prime Numbers from 20 to 50 are: 23 29 31 37 41 43 47