#practiceLinkDiv { görüntü: yok !önemli; }Bir doğal sayı verildiğinde N görev n'nin tüm bölenlerinin bölenlerinin toplamını bulmaktır.
internet tarayıcı ayarları
Örnekler:
Input : n = 54 Output : 232 Divisors of 54 = 1 2 3 6 9 18 27 54. Sum of divisors of 1 2 3 6 9 18 27 54 are 1 3 4 12 13 39 40 120 respectively. Sum of divisors of all the divisors of 54 = 1 + 3 + 4 + 12 + 13 + 39 + 40 + 120 = 232. Input : n = 10 Output : 28 Divisors of 10 are 1 2 5 10 Sums of divisors of divisors are 1 3 6 18. Overall sum = 1 + 3 + 6 + 18 = 28Recommended Practice Bölenlerin toplamını bulun Deneyin!
Herhangi bir sayının olduğu gerçeğini kullanarak N asal faktörlerin çarpımı olarak ifade edilebilir N = p1k1xp2k2x ... nerede p1P2... asal sayılardır.
N'nin tüm bölenleri p olarak ifade edilebilir1Axp2Bx ... burada 0<= a <= k1 and 0 <= b <= k2.
Şimdi bölenlerin toplamı p'nin tüm kuvvetlerinin toplamı olacak1- P1P11.... P1k1p'nin tüm kuvvetleriyle çarpılır2- P2P21.... P2k1
N'nin Bölenlerinin Toplamı
= (p1xp2) + (p11xp2) +....+ (p1k1xp2) +....+ (p1xp21) + (p11xp21) +....+ (p1k1xp21) +........+
(P1xp2k2) + (p11xp2k2) +......+ (p1k1x p2k2).
= (p1+ p11+...+ p1k1)xp2+ (p1+ p11+...+ p1k1)xp21+.......+ (p1+ p11+...+ p1k1)xp2k2.
= (p1+ p11+...+ p1k1) x (p2+ p21+...+ p2k2).
Şimdi herhangi bir p'nin bölenleriAp için asal olan p'dirP1...... PA. Ve bölenlerin toplamı (p) olacaktır.(a+1)- 1)/(p -1) f(p) ile tanımlansın.
Yani tüm bölenlerin bölenlerinin toplamı şöyle olacaktır:
= (f(p1) + f(p11) +...+ f(p1k1)) x (f(p2) + f(p21) +...+ f(p2k2)).
Yani bir n sayısını asal çarpanlara ayırma yoluyla verildiğinde, tüm bölenlerin bölenlerinin toplamını bulabiliriz. Ancak bu problemde bize n'nin dizi elemanının çarpımı olduğu verildi. Her bir elemanın asal çarpanlara ayrılmasını bulun ve a gerçeğini kullanarakBx birC= birb+c.
Aşağıda bu yaklaşımın uygulanması yer almaktadır:
'Aslanla kaplan arasındaki fark nedir'C++
// C++ program to find sum of divisors of all // the divisors of a natural number. #include using namespace std; // Returns sum of divisors of all the divisors // of n int sumDivisorsOfDivisors(int n) { // Calculating powers of prime factors and // storing them in a map mp[]. map<int int> mp; for (int j=2; j<=sqrt(n); j++) { int count = 0; while (n%j == 0) { n /= j; count++; } if (count) mp[j] = count; } // If n is a prime number if (n != 1) mp[n] = 1; // For each prime factor calculating (p^(a+1)-1)/(p-1) // and adding it to answer. int ans = 1; for (auto it : mp) { int pw = 1; int sum = 0; for (int i=it.second+1; i>=1; i--) { sum += (i*pw); pw *= it.first; } ans *= sum; } return ans; } // Driven Program int main() { int n = 10; cout << sumDivisorsOfDivisors(n); return 0; }
Java // Java program to find sum of divisors of all // the divisors of a natural number. import java.util.HashMap; class GFG { // Returns sum of divisors of all the divisors // of n public static int sumDivisorsOfDivisors(int n) { // Calculating powers of prime factors and // storing them in a map mp[]. HashMap<Integer Integer> mp = new HashMap<>(); for (int j = 2; j <= Math.sqrt(n); j++) { int count = 0; while (n % j == 0) { n /= j; count++; } if (count != 0) mp.put(j count); } // If n is a prime number if (n != 1) mp.put(n 1); // For each prime factor calculating (p^(a+1)-1)/(p-1) // and adding it to answer. int ans = 1; for (HashMap.Entry<Integer Integer> entry : mp.entrySet()) { int pw = 1; int sum = 0; for (int i = entry.getValue() + 1; i >= 1; i--) { sum += (i * pw); pw *= entry.getKey(); } ans *= sum; } return ans; } // Driver code public static void main(String[] args) { int n = 10; System.out.println(sumDivisorsOfDivisors(n)); } } // This code is contributed by // sanjeev2552
Python3 # Python3 program to find sum of divisors # of all the divisors of a natural number. import math as mt # Returns sum of divisors of all # the divisors of n def sumDivisorsOfDivisors(n): # Calculating powers of prime factors # and storing them in a map mp[]. mp = dict() for j in range(2 mt.ceil(mt.sqrt(n))): count = 0 while (n % j == 0): n //= j count += 1 if (count): mp[j] = count # If n is a prime number if (n != 1): mp[n] = 1 # For each prime factor calculating # (p^(a+1)-1)/(p-1) and adding it to answer. ans = 1 for it in mp: pw = 1 summ = 0 for i in range(mp[it] + 1 0 -1): summ += (i * pw) pw *= it ans *= summ return ans # Driver Code n = 10 print(sumDivisorsOfDivisors(n)) # This code is contributed # by mohit kumar 29
C# // C# program to find sum of divisors of all // the divisors of a natural number. using System; using System.Collections.Generic; class GFG { // Returns sum of divisors of // all the divisors of n public static int sumDivisorsOfDivisors(int n) { // Calculating powers of prime factors and // storing them in a map mp[]. Dictionary<int int> mp = new Dictionary<int int>(); for (int j = 2; j <= Math.Sqrt(n); j++) { int count = 0; while (n % j == 0) { n /= j; count++; } if (count != 0) mp.Add(j count); } // If n is a prime number if (n != 1) mp.Add(n 1); // For each prime factor // calculating (p^(a+1)-1)/(p-1) // and adding it to answer. int ans = 1; foreach(KeyValuePair<int int> entry in mp) { int pw = 1; int sum = 0; for (int i = entry.Value + 1; i >= 1; i--) { sum += (i * pw); pw = entry.Key; } ans *= sum; } return ans; } // Driver code public static void Main(String[] args) { int n = 10; Console.WriteLine(sumDivisorsOfDivisors(n)); } } // This code is contributed // by Princi Singh
JavaScript <script> // Javascript program to find sum of divisors of all // the divisors of a natural number. // Returns sum of divisors of all the divisors // of n function sumDivisorsOfDivisors(n) { // Calculating powers of prime factors and // storing them in a map mp[]. let mp = new Map(); for (let j = 2; j <= Math.sqrt(n); j++) { let count = 0; while (n % j == 0) { n = Math.floor(n/j); count++; } if (count != 0) mp.set(j count); } // If n is a prime number if (n != 1) mp.set(n 1); // For each prime factor calculating (p^(a+1)-1)/(p-1) // and adding it to answer. let ans = 1; for (let [key value] of mp.entries()) { let pw = 1; let sum = 0; for (let i = value + 1; i >= 1; i--) { sum += (i * pw); pw = key; } ans *= sum; } return ans; } // Driver code let n = 10; document.write(sumDivisorsOfDivisors(n)); // This code is contributed by patel2127 </script>
Çıkış:
python programlama örnekleri
28
Zaman Karmaşıklığı: O(?n log n)
Yardımcı Alan: Açık)
Optimizasyonlar:
Birden fazla girdinin olduğu durumlarda kullanabileceğimiz değeri bulmamız gerekir. Eratostenes Eleği tartışıldığı gibi Bu postalamak.