给定一个数字,确定它是否有效 超完美数 . 如果满足以下条件,则数字n称为k-超完美: n=1+k∑ 我 D 我 所有这些都在哪里 我 是n的适当除数。 取k=1会给我们 完全数 . 前几个k-超完美数是6,21,28,301,325,496,697,…,相应的k值是1,2,1,6,3,1,12…
null
例如:
Input : N = 36, K = 1Output : 34 is not 1-HyperPerfectExplanation: The Divisors of 36 are 2, 3, 4, 6, 9, 12, 18the sum of the divisors is 54. For N = 36 to be 1-Hyperperfect, it would require 36 = 1 + 1(54), which we see, isinvalid Input : N = 325, K = 3Output : 325 is 3-HyperPerfectExplanation: We can use the first condition to evaluate this as K is odd and > 1 so here p = (3*k+1)/2 = 5, q = (3*k+4) = 13 p and q are both prime, so we compute p^2 * q = 5 ^ 2 * 13 = 325Hence N is a valid HyperPerfect number
C++
// C++ 4.3.2 program to check whether a // given number is k-hyperperfect #include <bits/stdc++.h> using namespace std; // function to find the sum of all // proper divisors (excluding 1 and N) int divisorSum( int N, int K) { int sum = 0; // Iterate only until sqrt N as we are // going to generate pairs to produce // divisors for ( int i = 2 ; i <= ceil ( sqrt (N)) ; i++) // As divisors occur in pairs, we can // take the values i and N/i as long // as i divides N if (N % i == 0) sum += ( i + N/i ); return sum; } // Function to check whether the given number // is prime bool isPrime( int n) { //base and corner cases if (n == 1 || n == 0) return false ; if (n <= 3) return true ; // Since integers can be represented as // some 6*k + y where y >= 0, we can eliminate // all integers that can be expressed in this // form if (n % 2 == 0 || n % 3 == 0) return false ; // start from 5 as this is the next prime number for ( int i=5; i*i<=n; i=i+6) if (n % i == 0 || n % ( i + 2 ) == 0) return false ; return true ; } // Returns true if N is a K-Hyperperfect number // Else returns false. bool isHyperPerfect( int N, int K) { int sum = divisorSum(N, K); // Condition from the definition of hyperperfect if ((1 + K * (sum)) == N) return true ; else return false ; } // Driver function to test for hyperperfect numbers int main() { int N1 = 1570153, K1 = 12; int N2 = 321, K2 = 3; // First two statements test against the condition // N = 1 + K*(sum(proper divisors)) if (isHyperPerfect(N1, K1)) cout << N1 << " is " << K1 << "-HyperPerfect" << "" ; else cout << N1 << " is not " << K1 << "-HyperPerfect" << "" ; if (isHyperPerfect(N2, K2)) cout << N2 << " is " << K2 << "-HyperPerfect" << "" ; else cout << N2 << " is not " << K2 << "-HyperPerfect" << "" ; return 0; } |
JAVA
// Java program to check // whether a given number // is k-hyperperfect import java.io.*; class GFG { // function to find the // sum of all proper // divisors (excluding // 1 and N) static int divisorSum( int N, int K) { int sum = 0 ; // Iterate only until // sqrt N as we are // going to generate // pairs to produce // divisors for ( int i = 2 ; i <= Math.ceil(Math.sqrt(N)); i++) // As divisors occur in // pairs, we can take // the values i and N/i // as long as i divides N if (N % i == 0 ) sum += (i + N / i); return sum; } // Function to check // whether the given // number is prime static boolean isPrime( int n) { // base and corner cases if (n == 1 || n == 0 ) return false ; if (n <= 3 ) return true ; // Since integers can be // represented as some // 6*k + y where y >= 0, // we can eliminate all // integers that can be // expressed in this form if (n % 2 == 0 || n % 3 == 0 ) return false ; // start from 5 as this // is the next prime number for ( int i = 5 ; i * i <= n; i = i + 6 ) if (n % i == 0 || n % ( i + 2 ) == 0 ) return false ; return true ; } // Returns true if N is // a K-Hyperperfect number // Else returns false. static boolean isHyperPerfect( int N, int K) { int sum = divisorSum(N, K); // Condition from the // definition of hyperperfect if (( 1 + K * (sum)) == N) return true ; else return false ; } // Driver Code public static void main (String[] args) { int N1 = 1570153 , K1 = 12 ; int N2 = 321 , K2 = 3 ; // First two statements test // against the condition // N = 1 + K*(sum(proper divisors)) if (isHyperPerfect(N1, K1)) System.out.println (N1 + " is " + K1 + "-HyperPerfect" ); else System.out.println(N1 + " is not " + K1 + "-HyperPerfect" ); if (isHyperPerfect(N2, K2)) System.out.println( N2 + " is " + K2 + "-HyperPerfect" ); else System.out.println(N2 + " is not " + K2 + "-HyperPerfect" ); } } // This code is contributed by ajit |
Python3
# Python3 program to check whether a # given number is k-hyperperfect import math # Function to find the sum of all # proper divisors (excluding 1 and N) def divisorSum(N, K): Sum = 0 # Iterate only until sqrt N as we are # going to generate pairs to produce # divisors for i in range ( 2 , math.ceil(math.sqrt(N))): # As divisors occur in pairs, we can # take the values i and N/i as long # as i divides N if (N % i = = 0 ): Sum + = (i + int (N / i)) return Sum # Function to check whether the given # number is prime def isPrime(n): # Base and corner cases if (n = = 1 or n = = 0 ): return False if (n < = 3 ): return True # Since integers can be represented as # some 6*k + y where y >= 0, we can eliminate # all integers that can be expressed in this # form if (n % 2 = = 0 or n % 3 = = 0 ): return False # Start from 5 as this is the next # prime number i = 5 while (i * i < = n): if (n % i = = 0 or n % (i + 2 ) = = 0 ): return False i + = 6 return True # Returns true if N is a K-Hyperperfect # number. Else returns false. def isHyperPerfect(N, K): Sum = divisorSum(N, K) # Condition from the definition # of hyperperfect if (( 1 + K * ( Sum )) = = N): return True else : return False # Driver code N1 = 1570153 K1 = 12 N2 = 321 K2 = 3 # First two statements test against the condition # N = 1 + K*(sum(proper divisors)) if (isHyperPerfect(N1, K1)): print (N1, " is " , K1, "-HyperPerfect" , sep = "") else : print (N1, " is not " , K1, "-HyperPerfect" , sep = "") if (isHyperPerfect(N2, K2)): print (N2, " is " , K2, "-HyperPerfect" , sep = "") else : print (N2, " is not " , K2, "-HyperPerfect" , sep = "") # This code is contributed by avanitrachhadiya2155 |
C#
// C# program to check // whether a given number // is k-hyperperfect using System; class GFG { // function to find the // sum of all proper // divisors (excluding // 1 and N) static int divisorSum( int N, int K) { int sum = 0; // Iterate only until // sqrt N as we are // going to generate // pairs to produce // divisors for ( int i = 2 ; i <= Math.Ceiling(Math.Sqrt(N)); i++) // As divisors occur in // pairs, we can take // the values i and N/i // as long as i divides N if (N % i == 0) sum += (i + N / i); return sum; } // Function to check // whether the given // number is prime static bool isPrime( int n) { // base and corner cases if (n == 1 || n == 0) return false ; if (n <= 3) return true ; // Since integers can be // represented as some // 6*k + y where y >= 0, // we can eliminate all // integers that can be // expressed in this form if (n % 2 == 0 || n % 3 == 0) return false ; // start from 5 as this // is the next prime number for ( int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % ( i + 2 ) == 0) return false ; return true ; } // Returns true if N is // a K-Hyperperfect number // Else returns false. static bool isHyperPerfect( int N, int K) { int sum = divisorSum(N, K); // Condition from the // definition of hyperperfect if ((1 + K * (sum)) == N) return true ; else return false ; } // Driver Code static public void Main () { int N1 = 1570153, K1 = 12; int N2 = 321, K2 = 3; // First two statements // test against the // condition N = 1 + K* // (sum(proper divisors)) if (isHyperPerfect(N1, K1)) Console.WriteLine(N1 + " is " + K1 + "-HyperPerfect" ); else Console.WriteLine(N1 + " is not " + K1 + "-HyperPerfect" ); if (isHyperPerfect(N2, K2)) Console.WriteLine( N2 + " is " + K2 + "-HyperPerfect" ); else Console.WriteLine(N2 + " is not " + K2 + "-HyperPerfect" ); } } // This code is contributed // by akt_mit |
PHP
<?php // PHP 4.3.2 program to check // whether a given number is // k-hyperperfect // function to find the sum // of all proper divisors // (excluding 1 and N) function divisorSum( $N , $K ) { $sum = 0; // Iterate only until // sqrt N as we are // going to generate // pairs to produce // divisors for ( $i = 2 ; $i <= ceil (sqrt( $N )) ; $i ++) // As divisors occur in // pairs, we can take the // values i and N/i as long // as i divides N if ( $N % $i == 0) $sum += ( $i + $N / $i ); return $sum ; } // Function to check whether // the given number is prime function isPrime( $n ) { // base and corner cases if ( $n == 1 || $n == 0) return false; if ( $n <= 3) return true; // Since integers can be // represented as some 6*k + y // where y >= 0, we can // eliminate all integers that // can be expressed in this form if ( $n % 2 == 0 || $n % 3 == 0) return false; // start from 5 as this // is the next prime number for ( $i = 5; $i * $i <= $n ; $i = $i + 6) if ( $n % $i == 0 || $n % ( $i + 2) == 0) return false; return true; } // Returns true if N is a // K-Hyperperfect number // Else returns false. function isHyperPerfect( $N , $K ) { $sum = divisorSum( $N , $K ); // Condition from the // definition of hyperperfect if ((1 + $K * ( $sum )) == $N ) return true; else return false; } // Driver Code $N1 = 1570153; $K1 = 12; $N2 = 321; $K2 = 3; // First two statements test // against the condition // N = 1 + K*(sum(proper divisors)) if (isHyperPerfect( $N1 , $K1 )) echo $N1 , " is " , $K1 , "-HyperPerfect" , "" ; else echo $N1 , " is not " , $K1 , "-HyperPerfect" , "" ; if (isHyperPerfect( $N2 , $K2 )) echo $N2 , " is " , K2, "-HyperPerfect" , "" ; else echo $N2 , " is not " , $K2 , "-HyperPerfect" , "" ; // This code is contributed // by akt_mit ?> |
Javascript
<script> // Javascript program to check // whether a given number // is k-hyperperfect // Function to find the // sum of all proper // divisors (excluding // 1 and N) function divisorSum(N, K) { let sum = 0; // Iterate only until sqrt N as // we are going to generate // pairs to produce divisors for (let i = 2; i <= Math.ceil(Math.sqrt(N)); i++) // As divisors occur in // pairs, we can take // the values i and N/i // as long as i divides N if (N % i == 0) sum += (i + parseInt(N / i, 10)); return sum; } // Function to check // whether the given // number is prime function isPrime(n) { // base and corner cases if (n == 1 || n == 0) return false ; if (n <= 3) return true ; // Since integers can be // represented as some // 6*k + y where y >= 0, // we can eliminate all // integers that can be // expressed in this form if (n % 2 == 0 || n % 3 == 0) return false ; // Start from 5 as this // is the next prime number for (let i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return false ; return true ; } // Returns true if N is // a K-Hyperperfect number // Else returns false. function isHyperPerfect(N, K) { let sum = divisorSum(N, K); // Condition from the // definition of hyperperfect if ((1 + K * (sum)) == N) return true ; else return false ; } // Driver code let N1 = 1570153, K1 = 12; let N2 = 321, K2 = 3; // First two statements // test against the // condition N = 1 + K* // (sum(proper divisors)) if (isHyperPerfect(N1, K1)) document.write(N1 + " is " + K1 + "-HyperPerfect" + "</br>" ); else document.write(N1 + " is not " + K1 + "-HyperPerfect" + "</br>" ); if (isHyperPerfect(N2, K2)) document.write(N2 + " is " + K2 + "-HyperPerfect" + "</br>" ); else document.write(N2 + " is not " + K2 + "-HyperPerfect" + "</br>" ); // This code is contributed by decode2207 </script> |
输出:
1570153 is 12-HyperPerfect321 is not 3-HyperPerfect
给定k,我们可以在特殊情况下执行一些检查,以确定数字是否为超完美:
- 如果 K>1,K是奇数 那就让我 p=(3*k+1)/2和q=3*k+4 如果p和q是素数,那么 P 2. Q k-超完美吗
- 如果p和q是 不同奇素数 以至于 K(p+q)=pq–1 对于K的某个正整数值 pq k-超完美吗
参考: https://en.wikipedia.org/wiki/Hyperperfect_number
本文由 迪帕克·斯里瓦察夫 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END