C/C++程式:求解一個數的唯一素因數的乘積?


在本節中,我們將學習如何高效地計算一個數的唯一素因數的乘積。例如,數字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

更新於:2019年7月30日

540 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.