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

แบบสอบถามเพื่อพิมพ์ตัวหารทั้งหมดของ n โดยใช้ C++


ในปัญหาที่กำหนด เราจะต้องพิมพ์ตัวหารทั้งหมดของจำนวนเต็มที่กำหนด n

Input: 15
Output: 1 3 5 15
Explanation
Divisors of 15 are: 1,3, 5, 15

Input: 30
Output: 1 2 3 5 15 30

ในปัญหาที่กำหนด เราสามารถใช้วิธีที่ใช้ในตะแกรง Eratosthenes เพื่อค้นหาตัวหารทั้งหมดของ n

แนวทางในการหาทางออก

ในแนวทางที่กำหนดให้ เราจะใช้แนวคิดที่ใช้ตะแกรงของ Eratosthenes และหาตัวหารของ n

ตัวอย่าง

#include <bits/stdc++.h>
#define MOD 1000000007

using namespace std;

vector<int> divisors[100001]; // our vector containing number with all of its divisors
void findsieve(int max) { // filling data in vector divisors till 10e5
   for(int i = 1; i <= max; i++) {
      for(int j = i; j <= max; j += i)
         divisors[j].push_back(i);
   }
}
void __print(int n){ // the function to print divisors
   for(auto x : divisors[n])
      cout << x << " ";
   cout << "\n";
}

int main() {
   findsieve(100000); // we hardcode the sieve and divisors till 10e5
   int n = 6; // the given n
   __print(n);
   n = 30; // new n
   __print(n);
   return 0;
}

ผลลัพธ์

1 2 3 6
1 2 3 5 6 10 15 30

คำอธิบายของโค้ดด้านบน

ในแนวทางนี้ เราปฏิบัติตามแนวคิดเดียวกันกับตะแกรงของ Eratosthenes เราพบตัวหารของทุกตัวเลขจนถึง 105 เมื่อเราได้รับคำถาม q เราไม่จำเป็นต้องหาตัวหาร ดังนั้นสิ่งนี้จึงลดความซับซ้อนของเวลาลงอย่างมากเมื่อถูกถามคำถาม q ดังนั้น ความซับซ้อนของเราจึงกลายเป็น O(Q*N) โดยที่ Q คือจำนวนคำถามที่เราจัดการ และ N คือจำนวนตัวหารของ n

บทสรุป

ในบทความนี้ เราแก้ปัญหา:แบบสอบถามเพื่อพิมพ์ตัวหารทั้งหมดของ n ซึ่งเราใช้หลักการของตะแกรงของ Eratosthenes นอกจากนี้เรายังได้เรียนรู้โปรแกรม C ++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ ( Normal) ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์