ในปัญหานี้ เราจะได้รับตัวเลข N และต้องหาตัวประกอบเฉพาะที่ไม่ซ้ำกันทั้งหมดและกำลังของพวกเขาที่หารตัวเลขนั้นลงตัว
ตัวอย่างเพื่อความเข้าใจ
Input: 55 Output: 5 power 1 11 power 1
คำอธิบาย: 55 หารด้วย 5 และ 11 ลงตัว
เพื่อแก้ปัญหานี้ วิธีง่ายคือการหาตัวประกอบเฉพาะของ N จากนั้นหากำลังของจำนวนเฉพาะที่หาร N ลงตัวและพิมพ์ออกมา
อัลกอริทึม
วิธีที่มีประสิทธิภาพ
ขั้นตอนที่ 1: หา array s[N+1] โดย s[i] = ตัวประกอบเฉพาะของ i ที่หาร N ลงตัว
ขั้นตอนที่ 2: หากำลังทั้งหมดของ i โดย prime = s[N] และ pow = 1
ขั้นตอนที่ 3: While (N > 1):
ขั้นตอน 3.1: N /= s[N]
ขั้นตอน 3.2: if (prime == s[N]) : pow++
ขั้นตอนที่ 4: พิมพ์ prime และ pow
โปรแกรมตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void primes(int N, int s[]) {
vector <bool> prime(N + 1, false);
for (int i = 2; i <= N; i += 2)
s[i] = 2;
for (int i = 3; i <= N; i += 2) {
if (prime[i] == false) {
s[i] = i;
for (int j = i; j * i <= N; j += 2) {
if (prime[i * j] == false) {
prime[i * j] = true;
s[i * j] = i;
}
}
}
}
}
void generatePrimeFactors(int N) {
int s[N + 1];
primes(N, s);
cout << "Factor\tPower" << endl;
int prime = s[N];
int power = 1;
while (N > 1) {
N /= s[N];
if (prime == s[N]) {
power++;
continue;
}
cout << prime << "\t" << power << endl;
prime = s[N];
power = 1;
}
}
int main() {
int N = 55;
cout << "The prime factors are and their powers are :\n";
generatePrimeFactors(N);
return 0;
}
ผลลัพธ์
The prime factors are and their powers are -
Factor Power 5 1 11 1