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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP