#practiceLinkDiv { العرض: لا شيء! مهم؛ }يقال أن الرقم n هو رقم ناقص إذا كان مجموع جميع قواسم الرقم الذي يشير إليه مجموع المقسومات (ن) أقل من ضعف قيمة الرقم n. والفرق بين هاتين القيمتين يسمى نقص .
رياضيا إذا كان الشرط أدناه يحمل الرقم يقال أنه ناقص:
قائمة ج #
divisorsSum(n) < 2 * n deficiency = (2 * n) - divisorsSum(n)
الأرقام القليلة الأولى الناقصة هي:
1 2 3 4 5 7 8 9 10 11 13 14 15 16 17 19 .....
بالنظر إلى رقم n، فإن مهمتنا هي معرفة ما إذا كان هذا الرقم رقمًا ناقصًا أم لا.
أمثلة :
Input: 21 Output: YES Divisors are 1 3 7 and 21. Sum of divisors is 32. This sum is less than 2*21 or 42. Input: 12 Output: NO Input: 17 Output: YES
الممارسة الموصى بها رقم ناقص جربه!
أ حل بسيط هو تكرار جميع الأرقام من 1 إلى n والتحقق مما إذا كان الرقم يقسم n وحساب المجموع. تحقق مما إذا كان هذا المجموع أقل من 2 * n أم لا.
التعقيد الزمني لهذا النهج: O ( n )
الحل الأمثل:
إذا لاحظنا بعناية أن قواسم الرقم n موجودة في أزواج. على سبيل المثال، إذا كان n = 100 فإن جميع أزواج المقسومات هي: (1100) (250) (425) (520) (1010)
باستخدام هذه الحقيقة يمكننا تسريع برنامجنا.
أثناء التحقق من المقسومات يجب أن نكون حذرين إذا كان هناك مقسومان متساويان كما في حالة (10 10). في مثل هذه الحالة سوف نأخذ واحدًا منهم فقط في حساب المبلغ.
تنفيذ النهج الأمثل
// C++ program to implement an Optimized Solution // to check Deficient Number #include using namespace std; // Function to calculate sum of divisors int divisorsSum(int n) { int sum = 0; // Initialize sum of prime factors // Note that this loop runs till square root of n for (int i = 1; i <= sqrt(n); i++) { if (n % i == 0) { // If divisors are equal take only one // of them if (n / i == i) { sum = sum + i; } else // Otherwise take both { sum = sum + i; sum = sum + (n / i); } } } return sum; } // Function to check Deficient Number bool isDeficient(int n) { // Check if sum(n) < 2 * n return (divisorsSum(n) < (2 * n)); } /* Driver program to test above function */ int main() { isDeficient(12) ? cout << 'YESn' : cout << 'NOn'; isDeficient(15) ? cout << 'YESn' : cout << 'NOn'; return 0; }
Java // Java program to check Deficient Number import java.io.*; class GFG { // Function to calculate sum of divisors static int divisorsSum(int n) { int sum = 0; // Initialize sum of prime factors // Note that this loop runs till square root of n for (int i = 1; i <= (Math.sqrt(n)); i++) { if (n % i == 0) { // If divisors are equal take only one // of them if (n / i == i) { sum = sum + i; } else // Otherwise take both { sum = sum + i; sum = sum + (n / i); } } } return sum; } // Function to check Deficient Number static boolean isDeficient(int n) { // Check if sum(n) < 2 * n return (divisorsSum(n) < (2 * n)); } /* Driver program to test above function */ public static void main(String args[]) { if (isDeficient(12)) System.out.println('YES'); else System.out.println('NO'); if (isDeficient(15)) System.out.println('YES'); else System.out.println('NO'); } } // This code is contributed by Nikita Tiwari
Python3 # Python program to implement an Optimized # Solution to check Deficient Number import math # Function to calculate sum of divisors def divisorsSum(n) : sum = 0 # Initialize sum of prime factors # Note that this loop runs till square # root of n i = 1 while i<= math.sqrt(n) : if (n % i == 0) : # If divisors are equal take only one # of them if (n // i == i) : sum = sum + i else : # Otherwise take both sum = sum + i; sum = sum + (n // i) i = i + 1 return sum # Function to check Deficient Number def isDeficient(n) : # Check if sum(n) < 2 * n return (divisorsSum(n) < (2 * n)) # Driver program to test above function if ( isDeficient(12) ): print ('YES') else : print ('NO') if ( isDeficient(15) ) : print ('YES') else : print ('NO') # This Code is contributed by Nikita Tiwari
C# // C# program to implement an Optimized Solution // to check Deficient Number using System; class GFG { // Function to calculate sum of // divisors static int divisorsSum(int n) { // Initialize sum of prime factors int sum = 0; // Note that this loop runs till // square root of n for (int i = 1; i <= (Math.Sqrt(n)); i++) { if (n % i == 0) { // If divisors are equal // take only one of them if (n / i == i) { sum = sum + i; } else // Otherwise take both { sum = sum + i; sum = sum + (n / i); } } } return sum; } // Function to check Deficient Number static bool isDeficient(int n) { // Check if sum(n) < 2 * n return (divisorsSum(n) < (2 * n)); } /* Driver program to test above function */ public static void Main() { string var = isDeficient(12) ? 'YES' : 'NO'; Console.WriteLine(var); string var1 = isDeficient(15) ? 'YES' : 'NO'; Console.WriteLine(var1); } } // This code is contributed by vt_m
PHP // PHP program to implement // an Optimized Solution // to check Deficient Number // Function to calculate // sum of divisors function divisorsSum($n) { // Initialize sum of // prime factors $sum = 0; // Note that this loop runs // till square root of n for ($i = 1; $i <= sqrt($n); $i++) { if ($n % $i==0) { // If divisors are equal // take only one of them if ($n / $i == $i) { $sum = $sum + $i; } // Otherwise take both else { $sum = $sum + $i; $sum = $sum + ($n / $i); } } } return $sum; } // Function to check // Deficient Number function isDeficient($n) { // Check if sum(n) < 2 * n return (divisorsSum($n) < (2 * $n)); } // Driver Code $ds = isDeficient(12) ? 'YESn' : 'NOn'; echo($ds); $ds = isDeficient(15) ? 'YESn' : 'NOn'; echo($ds); // This code is contributed by ajit;. ?> JavaScript <script> // Javascript program to check Deficient Number // Function to calculate sum of divisors function divisorsSum(n) { let sum = 0; // Initialize sum of prime factors // Note that this loop runs till square root of n for (let i = 1; i <= (Math.sqrt(n)); i++) { if (n % i == 0) { // If divisors are equal take only one // of them if (n / i == i) { sum = sum + i; } else // Otherwise take both { sum = sum + i; sum = sum + (n / i); } } } return sum; } // Function to check Deficient Number function isDeficient(n) { // Check if sum(n) < 2 * n return (divisorsSum(n) < (2 * n)); } // Driver code to test above methods if (isDeficient(12)) document.write('YES' + '
'); else document.write('NO' + '
'); if (isDeficient(15)) document.write('YES' + '
'); else document.write('NO' + '
'); // This code is contributed by avijitmondal1998. </script>
الإخراج :
NO YES
تعقيد الوقت : يا (جذر (ن))
المساحة المساعدة : يا(1)
مراجع :
https://en.wikipedia.org/wiki/Deficient_number