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

ตรวจสอบว่าหลักแรกและสุดท้ายของจำนวนที่น้อยที่สุดเป็นจำนวนเฉพาะใน Python


สมมติว่าเรามีอาร์เรย์ที่เรียกว่า digits ที่มีเฉพาะตัวเลข เราต้องหาจำนวนที่น้อยที่สุดที่เป็นไปได้จากตัวเลขที่ระบุ จากนั้นตรวจสอบว่าตัวเลขโดยนำหลักแรกและหลักสุดท้ายของตัวเลขที่สร้างขึ้นมานั้นเป็นจำนวนเฉพาะหรือไม่ เราจะพิมพ์ตัวเลขเองแล้วตามด้วยตัวเลขเฉพาะ

ดังนั้น หากอินพุตเป็นตัวเลข =[5,2,1,7] เอาต์พุตจะเป็น 1257 จะเป็นตัวเลขที่น้อยที่สุด ตัวเลขโดยนำหลักแรกและหลักสุดท้ายคือ 17 และ 71 เป็นจำนวนเฉพาะ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • digits_freq :=แผนที่ที่มีความถี่ของตัวเลข
  • หมายเลข :=สตริงว่าง
  • สำหรับฉันในช่วง 0 ถึง 9 ทำ
    • สำหรับ j ในช่วง 0 ถึง digits_freq[i] - 1 ทำ
      • number :=number ต่อกัน digit i
  • num :=number โดยเอาหลักแรกและหลักสุดท้ายของตัวเลข
  • rev :=ตัวเลขโดยเอาหลักสุดท้ายและหลักแรกของตัวเลข
  • ถ้า num เป็นจำนวนเฉพาะ และ rev เป็นจำนวนเฉพาะ แล้ว
    • คืนหมายเลข num rev
  • มิฉะนั้น เมื่อ num เป็นจำนวนเฉพาะ แล้ว
    • คืนหมายเลข num
  • มิฉะนั้น เมื่อ rev เป็นจำนวนเฉพาะ แล้ว
    • หมายเลขส่งคืน rev
  • มิฉะนั้น
    • คืนค่าเท็จ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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

from collections import defaultdict
 
def isPrime(num):
   if num > 1:
      for i in range(2, num):
         if num % i == 0:
           return False
      return True
   return False
 
def solve(arr):
   digits_freq = defaultdict(int)

   for i in range(len(arr)):
      digits_freq[arr[i]] += 1
 
   number = ""
   for i in range(0, 10):
      for j in range(digits_freq[i]):
         number += str(i)
       
   num = int(number[0] + number[-1])
   rev = int(number[-1] + number[0])
 
   if isPrime(num) and isPrime(rev):
      return int(number), num, rev
   elif isPrime(num):
      return number, num
   elif isPrime(rev):
      return number, rev
   else:
      return False
   
digits = [5,2,1,7]
print(solve(digits))

อินพุต

[5,2,1,7]

ผลลัพธ์

(1257, 17, 71)