คำชี้แจงปัญหา
รับรายการที่เชื่อมโยงของจำนวนเต็มบวก n เราต้องหาจำนวนเฉพาะที่มีค่าต่ำสุดและสูงสุด
หากรายการที่กำหนดคือ −
10 -> 4 -> 1 -> 12 -> 13 -> 7 -> 6 -> 2 -> 27 -> 33 จากนั้นจำนวนเฉพาะขั้นต่ำคือ 2 และจำนวนเฉพาะสูงสุดคือ 13
อัลกอริทึม
<ก่อน>1. ค้นหาจำนวนสูงสุดจากจำนวนที่กำหนด ให้เราเรียกมันว่า maxNumber2 สร้างจำนวนเฉพาะตั้งแต่ 1 ถึง maxNumber และจัดเก็บไว้ในอาร์เรย์ไดนามิก3 ทำซ้ำรายการที่เชื่อมโยงและใช้อาร์เรย์แบบไดนามิกเพื่อค้นหาจำนวนเฉพาะที่มีค่าต่ำสุดและสูงสุดตัวอย่าง
#include#include #include #include #include #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) โดยใช้เนมสเปซ std;void printMinAndMaxPrimes(list
intList){ int maxNumber =*max_element(intList.begin(), intList.end()); vector จำนวนเฉพาะ (maxNumber + 1, จริง); ไพรม์[0] =ไพรม์[1] =เท็จ; สำหรับ (int p =2; p * p <=maxNumber; ++p) { if (primes [p])) { สำหรับ (int i =p * 2; i <=maxNumber; i +=p) { เฉพาะ [i ] =เท็จ; } } } int minPrime =INT_MAX; int maxPrime =INT_MIN; สำหรับ (auto it =intList.begin(); it !=intList.end(); ++it) { if (primes[*it]) { minPrime =min(minPrime, *it); maxPrime =สูงสุด (maxPrime, *มัน); } } cout <<"จำนวนเฉพาะของค่าต่ำสุด =" < intList(arr, arr + SIZE(arr)); printMinAndMaxPrimes(intList); คืนค่า 0;}
ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
จำนวนเฉพาะของค่าต่ำสุด =2จำนวนเฉพาะของค่าสูงสุด =13