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

โปรแกรม C/C++ เพื่อค้นหา Product ของตัวประกอบเฉพาะของตัวเลข?


ในส่วนนี้เราจะมาดูกันว่าเราจะหาผลคูณของตัวประกอบเฉพาะของจำนวนอย่างมีประสิทธิภาพได้อย่างไร มีตัวเลขบอกว่า n =1092 เราต้องได้ผลคูณของตัวประกอบเฉพาะของตัวนี้ ตัวประกอบเฉพาะของ 1092 คือ 2, 2, 3, 7, 13 ดังนั้นตัวประกอบเฉพาะเฉพาะคือ {2, 3, 7, 13} ผลคูณคือ 546 ในการแก้ปัญหานี้ เราต้องปฏิบัติตามกฎนี้ −

  • เมื่อตัวเลขหารด้วย 2 ลงตัว ให้คูณ 2 ด้วยผลคูณ แล้วหารจำนวนด้วย 2 ซ้ำๆ จากนั้นระบบจะละเว้น 2 วินาทีถัดไป

  • ตอนนี้ตัวเลขต้องเป็นเลขคี่ ตอนนี้เริ่มจาก 3 ถึงรากที่สองของตัวเลข ถ้าตัวเลขหารด้วยค่าปัจจุบันได้ลงตัว ให้คูณตัวประกอบเข้ากับผลคูณแล้วเปลี่ยนตัวเลขโดยหารด้วยตัวเลขปัจจุบันแล้วทำต่อ ถัดไปจะถูกละเว้นเหมือนด้านบน

  • และสุดท้ายถ้าตัวเลขมากกว่า 2 ก็จะไม่ใช่ 1 ดังนั้นให้คูณจำนวนที่เหลือ

ให้เราดูอัลกอริธึมเพื่อรับแนวคิดที่ดีขึ้น

อัลกอริทึม

uniquePrimeProduct(n)

begin
   prod := 1
   if n is divisible by 2, then
      prod := prod * 2
      n := n / 2
   end if
   while n is divisible by 2, do
      n := n / 2
   done
   for i := 3 to √𝑛, increase i by 2, do
      if n is divisible by i, then
         prod := prod * i
         n := n / i
      end if
      while n is divisible by i, do
         n := n / i
      done
   done
   if n > 2, then
      prod := prod * n
   end if
end

ตัวอย่าง

#include<stdio.h>
#include<math.h>
int uniquePrimeProduct(int n){
   int i, prod = 1;
   if(n % 2 == 0){
      prod *= 2;
      n = n/2;
   }
   while(n % 2 == 0){//skip next 2s
      n = n/2;
   }
   for(i = 3; i <= sqrt(n); i=i+2){ //i will increase by 2, to get only odd numbers
      if(n % i == 0){
         prod *= i;
         n = n/i;
      }
      while(n % i == 0){ //skip next i's
         n = n/i;
      }
   }
   if(n < 2){
      prod *= n;
   }
   return prod;
}
main() {
   int n;
   printf("Enter a number: ");
   scanf("%d", &n);
   printf("Product of prime factors: %d", uniquePrimeProduct(n));
}

ผลลัพธ์

Enter a number: 1092
Product of prime factors: 546