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

ค้นหาจำนวนสินค้าที่มีค่ามากที่สุดในตัวหารของจำนวนที่กำหนด N ใน C++


ในปัญหานี้ เราได้รับตัวเลข N หน้าที่ของเราคือ ค้นหาจำนวนสินค้าที่มีค่ามากที่สุดในตัวหารของจำนวนที่กำหนด N .

เลขเด็ด คือจำนวนที่ทุกหลักมากกว่าผลรวมของหลักทางขวา (บิตที่มีนัยสำคัญน้อยกว่าทั้งหมด) ตัวอย่างเช่น 732 เป็นตัวเลขที่ดี 7> 3+2 และ 3>2

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

Input : N = 15
Output : 15

คำอธิบาย

Divisors of 15 : 1, 3, 5, 15.

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาอย่างง่ายคือการหาตัวหารทั้งหมดของ N และหาจำนวนสินค้าที่ใหญ่ที่สุดซึ่งแยกออกมาเป็นผลคูณของตัวหารเฉพาะของตัวเลขทั้งหมด

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#include <bits/stdc++.h>
using namespace std;
int findLargestGoodNumber(int n){
   vector<int> primeFactors;
   int x = n;
   for (int i = 2; i * i <= n; i++) {
      if (x % i == 0) {
         primeFactors.push_back(i);
         while (x % i == 0) 
            x /= i;
      }
   }
   if (x > 1) 
      primeFactors.push_back(x);
   int goodNumber = 1;
   for (int i = 0; i < primeFactors.size(); i++)
      goodNumber = goodNumber * primeFactors[i];
   return goodNumber;
}
int main(){
   int n = 28;
   cout<<"The largest good Number in divisor of "<<n<<" is "<<findLargestGoodNumber(n); 
   return 0;
}

ตัวอย่าง

The largest good Number in divisor of 28 is 14