📌  相关文章
📜  每个数字的最大素数之和小于等于n

📅  最后修改于: 2021-04-24 18:19:52             🧑  作者: Mango

给定一个非负整数n 。问题是找到每个数的最大素数之和小于n

例子:

Input : n = 10
Output : 32
Largest prime factor of each number
Prime factor of 2 = 2
Prime factor of 3 = 3
Prime factor of 4 = 2
Prime factor of 5 = 5
Prime factor of 6 = 3
Prime factor of 7 = 7
Prime factor of 8 = 2
Prime factor of 9 = 3
Prime factor of 10 = 5

Sum = (2+3+2+5+3+7+2+3+5) = 32

Input : n = 12
Output : 46
 

算法:

sumOfLargePrimeFactor(n)
    Declare prime[n+1] and initialize all value to 0
    Initialize sum = 0
    max = n / 2
 
    for p = 2 to max
        if prime[p] == 0 then
            i = p*2
            while i <= n
                prime[i] = p
                i = i + p
        
    for p = 2 to n
        if prime[p] then
               sum = sum + prime[p]
           else
              sum = sum + p
    
    return sum
C++
// C++ implementation to find sum of largest prime factor
// of each number less than equal to n
#include 
 
using namespace std;
 
// function to find sum of largest prime factor
// of each number less than equal to n
int sumOfLargePrimeFactor(int n)
{
    // Create an integer array "prime[0..n]" and initialize
    // all entries of it as 0. A value in prime[i] will
    // finally be 0 if 'i' is a prime, else it will
    // contain the largest prime factor of 'i'.
    int prime[n+1], sum = 0;
    memset(prime, 0, sizeof(prime));
    int max = n / 2;
  
    for (int p=2; p<=max; p++)
    {
        // If prime[p] is '0', then it is a
        // prime number
        if (prime[p] == 0)
        {
            // Update all multiples of p
            for (int i=p*2; i<=n; i += p)
                prime[i] = p;
        }
    }
  
    // Sum up the largest prime factor of all
    // the numbers
    for (int p=2; p<=n; p++)
    {
        // if 'p' is a non- prime number then
        // prime[p] gives its largesr prime
        // factor
        if (prime[p])
             sum += prime[p];
            
        // 'p' is a prime number        
        else
             sum += p;
    }
     
    // required sum
    return sum;     
}
 
// Driver program to test above
int main()
{
    int n = 12;
    cout << "Sum = "
         << sumOfLargePrimeFactor(n);
    return 0;        
}


Java
// Java implementation to find sum
// of largest prime factor of each
// number less than equal to n
import java.io.*;
import java.util.*;
 
class GFG {
     
    // function to find sum of largest
    // prime factorof each number
    // less than equal to n
    static int sumOfLargePrimeFactor(int n)
    {
        // Create an integer array "prime[0..n]"
        // and initialize all entries of it as 0.
        // A value in prime[i] will finally be 0
        // if 'i' is a prime, else it will contain
        // the largest prime factor of 'i'.
        int prime[] = new int[n + 1], sum = 0;
        Arrays.fill(prime, 0);
        int max = n / 2;
     
        for (int p = 2; p <= max; p++)
        {
            // If prime[p] is '0', then it is a
            // prime number
            if (prime[p] == 0)
            {
                // Update all multiples of p
                for (int i = p * 2; i <= n; i += p)
                    prime[i] = p;
            }
        }
     
        // Sum up the largest prime factor of all
        // the numbers
        for (int p = 2; p <= n; p++)
        {
            // if 'p' is a non- prime number then
            // prime[p] gives its largesr prime
            // factor
            if (prime[p] != 0)
                sum += prime[p];
                 
            // 'p' is a prime number        
            else
                sum += p;
        }
         
        // required sum
        return sum;    
    }
     
    // Driver program
    public static void main(String args[])
    {
        int n = 12;
        System.out.println("Sum = "
                           + sumOfLargePrimeFactor(n));
    }
}
 
 
// This code is contributed
// by Nikita Tiwari.


Python3
# Python3 code implementation to find
# sum of largest prime factor of
# each number less than equal to n
 
# function to find sum of largest
# prime factor of each number less
# than equal to n
def sumOfLargePrimeFactor( n ):
 
    # Create an integer array "prime[0..n]"
    # and initialize all entries of it
    # as 0. A value in prime[i] will
    # finally be 0 if 'i' is a prime,
    # else it will contain the largest
    # prime factor of 'i'.
    prime = [0] * (n + 1)
    sum = 0
    max = int(n / 2)
    for p in range(2, max + 1):
         
        # If prime[p] is '0', then
        # it is a prime number
        if prime[p] == 0:
             
            # Update all multiples of p
            for i in range(p * 2, n + 1, p):
                prime[i] = p
                 
    # Sum up the largest prime factor
    # of all the numbers
    for p in range(2, n + 1):
         
        # if 'p' is a non- prime
        # number then prime[p] gives
        # its largesr prime factor
        if prime[p]:
            sum += prime[p]
         
        # 'p' is a prime number
        else:
            sum += p
     
    # required sum
    return sum
     
# Driver code to test above function
n = 12
print("Sum =", sumOfLargePrimeFactor(n))
 
# This code is contributed by "Sharad_Bhardwaj".


C#
// C# implementation to find sum
// of largest prime factor of each
// number less than equal to n
using System;
 
class GFG {
 
    // function to find sum of largest
    // prime factorof each number
    // less than equal to n
    static int sumOfLargePrimeFactor(int n)
    {
        // Create an integer array "prime[0..n]"
        // and initialize all entries of it as 0.
        // A value in prime[i] will finally be 0
        // if 'i' is a prime, else it will contain
        // the largest prime factor of 'i'.
        int[] prime = new int[n + 1];
        int sum = 0;
 
        for (int i = 1; i < n + 1; i++)
            prime[i] = 0;
 
        int max = n / 2;
 
        for (int p = 2; p <= max; p++)
        {
            // If prime[p] is '0', then it is a
            // prime number
            if (prime[p] == 0)
            {
                // Update all multiples of p
                for (int i = p * 2; i <= n; i += p)
                    prime[i] = p;
            }
        }
 
        // Sum up the largest prime factor of all
        // the numbers
        for (int p = 2; p <= n; p++)
        {
            // if 'p' is a non- prime number then
            // prime[p] gives its largesr prime
            // factor
            if (prime[p] != 0)
                sum += prime[p];
 
            // 'p' is a prime number
            else
                sum += p;
        }
 
        // required sum
        return sum;
    }
 
    // Driver program
    public static void Main()
    {
        int n = 12;
        Console.WriteLine("Sum = " + sumOfLargePrimeFactor(n));
    }
}
 
// This code is contributed by Sam007


PHP


Javascript


输出:

Sum = 46