📜  找到一个数的最大素数

📅  最后修改于: 2021-05-06 19:10:12             🧑  作者: Mango

给定正整数’n’(1 <= n <= 10 15 )。找到一个数字的最大素数。

Input: 6
Output: 3
Explanation
Prime factor of 6 are- 2, 3
Largest of them is '3'

Input: 15
Output: 5

该方法很简单,只需将给定数除以一个数的除数就可以分解它,并不断更新最大素数。请参阅此内容以了解更多信息。

C++
// C++ Program to find largest prime
// factor of number
#include 
#include
using namespace std;
  
// A function to find largest prime factor
long long maxPrimeFactors(long long n)
{
    // Initialize the maximum prime factor
    // variable with the lowest one
    long long maxPrime = -1;
  
    // Print the number of 2s that divide n
    while (n % 2 == 0) {
        maxPrime = 2;
        n >>= 1; // equivalent to n /= 2
    }
  
    // n must be odd at this point, thus skip
    // the even numbers and iterate only for
    // odd integers
    for (int i = 3; i <= sqrt(n); i += 2) {
        while (n % i == 0) {
            maxPrime = i;
            n = n / i;
        }
    }
  
    // This condition is to handle the case
    // when n is a prime number greater than 2
    if (n > 2)
        maxPrime = n;
  
    return maxPrime;
}
  
// Driver program to test above function
int main()
{
    long long n = 15;
    cout << maxPrimeFactors(n) << endl;
  
    n = 25698751364526;
    cout <<  maxPrimeFactors(n);
  
}
// This code is contributed by Shivi_Aggarwal


C
// C Program to find largest prime
// factor of number
#include 
#include 
  
// A function to find largest prime factor
long long maxPrimeFactors(long long n)
{
    // Initialize the maximum prime factor
    // variable with the lowest one
    long long maxPrime = -1;
  
    // Print the number of 2s that divide n
    while (n % 2 == 0) {
        maxPrime = 2;
        n >>= 1; // equivalent to n /= 2
    }
  
    // n must be odd at this point, thus skip
    // the even numbers and iterate only for
    // odd integers
    for (int i = 3; i <= sqrt(n); i += 2) {
        while (n % i == 0) {
            maxPrime = i;
            n = n / i;
        }
    }
  
    // This condition is to handle the case
    // when n is a prime number greater than 2
    if (n > 2)
        maxPrime = n;
  
    return maxPrime;
}
  
// Driver program to test above function
int main()
{
    long long n = 15;
    printf("%lld\n", maxPrimeFactors(n));
  
    n = 25698751364526;
    printf("%lld", maxPrimeFactors(n));
  
    return 0;
}


Java
// Java Program to find largest
// prime factor of number
import java.io.*;
import java.util.*;
  
class GFG {
  
    // function to find largest prime factor
    static long maxPrimeFactors(long n)
    {
        // Initialize the maximum prime
        // factor variable with the
        // lowest one
        long maxPrime = -1;
  
        // Print the number of 2s
        // that divide n
        while (n % 2 == 0) {
            maxPrime = 2;
  
            // equivalent to n /= 2
            n >>= 1;
        }
  
        // n must be odd at this point,
        // thus skip the even numbers
        // and iterate only for odd
        // integers
        for (int i = 3; i <= Math.sqrt(n); i += 2) {
            while (n % i == 0) {
                maxPrime = i;
                n = n / i;
            }
        }
  
        // This condition is to handle
        // the case when n is a prime
        // number greater than 2
        if (n > 2)
            maxPrime = n;
  
        return maxPrime;
    }
  
    // Driver code
    public static void main(String[] args)
    {
        Long n = 15l;
        System.out.println(maxPrimeFactors(n));
  
        n = 25698751364526l;
        System.out.println(maxPrimeFactors(n));
    }
}
  
// This code is contributed by Gitanjali


Python3
# Python3 code to find largest prime
# factor of number
import math
  
# A function to find largest prime factor
def maxPrimeFactors (n):
      
    # Initialize the maximum prime factor
    # variable with the lowest one
    maxPrime = -1
      
    # Print the number of 2s that divide n
    while n % 2 == 0:
        maxPrime = 2
        n >>= 1     # equivalent to n /= 2
          
    # n must be odd at this point, 
    # thus skip the even numbers and 
    # iterate only for odd integers
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        while n % i == 0:
            maxPrime = i
            n = n / i
      
    # This condition is to handle the 
    # case when n is a prime number 
    # greater than 2
    if n > 2:
        maxPrime = n
      
    return int(maxPrime)
  
# Driver code to test above function
n = 15
print(maxPrimeFactors(n))
  
n = 25698751364526
print(maxPrimeFactors(n))
  
# This code is contributed by "Sharad_Bhardwaj".


C#
// C# program to find largest
// prime factor of number
using System;
  
class GFG {
  
    // function to find largest prime factor
    static long maxPrimeFactors(long n)
    {
        // Initialize the maximum prime
        // factor variable with the
        // lowest one
        long maxPrime = -1;
  
        // Print the number of 2s
        // that divide n
        while (n % 2 == 0) {
            maxPrime = 2;
  
            // equivalent to n /= 2
            n >>= 1;
        }
  
        // n must be odd at this point,
        // thus skip the even numbers
        // and iterate only for odd
        // integers
        for (int i = 3; i <= Math.Sqrt(n); i += 2) {
            while (n % i == 0) {
                maxPrime = i;
                n = n / i;
            }
        }
  
        // This condition is to handle
        // the case when n is a prime
        // number greater than 2
        if (n > 2)
            maxPrime = n;
  
        return maxPrime;
    }
  
    // Driver code
    public static void Main()
    {
        long n = 15L;
        Console.WriteLine(maxPrimeFactors(n));
  
        n = 25698751364526L;
        Console.WriteLine(maxPrimeFactors(n));
    }
}
  
// This code is contributed by vt_m


PHP
>= 1; 
    }
  
    // n must be odd at 
    // this point, thus skip
    // the even numbers 
    // and iterate only for
    // odd integers
    for ($i = 3; $i <= sqrt($n); $i += 2)
    {
        while ($n % $i == 0)
        {
            $maxPrime = $i;
            $n = $n / $i;
        }
    }
  
    // This condition is 
    // to handle the case 
    // when n is a prime 
    // number greater than 2
    if ($n > 2)
        $maxPrime = $n;
  
    return $maxPrime;
}
  
    // Driver Code
    $n = 15;
    echo maxPrimeFactors($n), "\n";
  
    $n = 25698751364526;
    echo maxPrimeFactors($n), "\n";
  
// This code is contributed by aj_36
?>


输出:

5
328513

时间复杂度: \text{O}(\sqrt{n})
辅助空间: \text{O}(1)