ในปัญหานี้ เราได้รับตัวเลข N และเราต้องหาตัวประกอบเฉพาะทั้งหมดและยกกำลังที่หารจำนวนนั้น
มาดูตัวอย่างเพื่อทำความเข้าใจหัวข้อ −
Input: 55 Output: 5 power 1 11 power 1
คำอธิบาย −
55 หารด้วย 5 ลงตัวกับ 11
ในการแก้ปัญหานี้ วิธีง่ายๆ ในการแก้ปัญหาคือการหาตัวประกอบเฉพาะของ N แล้วหากำลังของจำนวนเฉพาะที่หารจำนวน N แล้วพิมพ์ออกมา
อัลกอริทึม
แนวทางที่มีประสิทธิภาพ
Step 1: Find an array s[N+1]. s[i] = prime factor of i dividing N. Step 2: Find all powers of i. prime = s[N] and pow = 1. Step 3: While (N > 1) : Step 3.1: N /= s[N]; Step 3.2: if(prime = s[N]) : pow++ Step 4: print prime and 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; }
ผลลัพธ์
ปัจจัยสำคัญคือและพลังของพวกมันคือ −
Factor Power 5 1 11 1