📜  具有最大素数的数量

📅  最后修改于: 2021-04-29 15:24:20             🧑  作者: Mango

给定整数N。任务是找到一个小于或等于N且具有最大素数的数字。如果有两个或多个具有相同最大素数的数字,请找出最小的一个。
例子:

Input : N = 10
Output : 6
Number of prime factor of:
1 : 0
2 : 1
3 : 1
4 : 1
5 : 1
6 : 2
7 : 1
8 : 1
9 : 1
10 : 2
6 and 10 have maximum (2) prime factor
but 6 is smaller.

Input : N = 40
Output : 30

方法1(强力):
对于从1到N的每个整数,找到每个整数的质数个数,并找到具有最大质数个数的最小数。
方法2(更好的方法):
使用筛分法计算每个小于N的素数的个数,并找到具有最大个数的最小数。
以下是此方法的实现:

C++
// C++ program to find integer having maximum number
// of prime factor in first N natural numbers.
#include
 
using namespace std;
 
// Return smallest number having maximum
// prime factors.
int maxPrimefactorNum(int N)
{
    int arr[N + 5];
    memset(arr, 0, sizeof(arr));
 
    // Sieve of eratosthenes method to count
    // number of prime factors.
    for (int i = 2; i*i <= N; i++)
    {
        if (!arr[i])
            for (int j = 2*i; j <= N; j+=i)
                arr[j]++;
 
        arr[i] = 1;
    }
 
    int maxval = 0, maxint = 1;
 
    // Finding number having maximum number
    // of prime factor.
    for (int i = 1; i <= N; i++)
    {
        if (arr[i] > maxval)
        {
            maxval = arr[i];
            maxint = i;
        }
    }
 
    return maxint;
}
 
// Driven Program
int main()
{
    int N = 40;
    cout << maxPrimefactorNum(N) << endl;
    return 0;
}


Java
// Java program to find integer having maximum number
// of prime factor in first N natural numbers.
import java.util.Arrays;
public class GFG {
 
// Return smallest number having maximum
// prime factors.
    static int maxPrimefactorNum(int N) {
        int arr[] = new int[N + 5];
        Arrays.fill(arr, 0);
         
        // Sieve of eratosthenes method to count
        // number of prime factors.
        for (int i = 2; i * i <= N; i++) {
            if (arr[i] == 0) {
                for (int j = 2 * i; j <= N; j += i) {
                    arr[j]++;
                }
            }
 
            arr[i] = 1;
        }
 
        int maxval = 0, maxint = 1;
 
        // Finding number having maximum number
        // of prime factor.
        for (int i = 1; i <= N; i++) {
            if (arr[i] > maxval) {
                maxval = arr[i];
                maxint = i;
            }
        }
 
        return maxint;
    }
// Driver program
 
    public static void main(String[] args) {
        int N = 40;
        System.out.println(maxPrimefactorNum(N));
    }
}


Python3
# Python 3 program to find integer having
# maximum number of prime factor in first
# N natural numbers.
from math import sqrt
 
# Return smallest number having maximum
# prime factors.
def maxPrimefactorNum(N):
    arr = [0 for i in range(N + 5)]
 
    # Sieve of eratosthenes method to
    # count number of prime factors.
    for i in range(2, int(sqrt(N)) + 1, 1):
        if (arr[i] == 0):
            for j in range(2 * i, N + 1, i):
                arr[j] += 1
 
        arr[i] = 1
 
    maxval = 0
    maxint = 1
 
    # Finding number having maximum
    # number of prime factor.
    for i in range(1, N + 1, 1):
        if (arr[i] > maxval):
            maxval = arr[i]
            maxint = i
     
    return maxint
 
# Driver Code
if __name__ == '__main__':
    N = 40
    print(maxPrimefactorNum(N))
 
# This code is contributed by
# Sahil_Shelangia


C#
// C# program to find integer having
// maximum number of prime factor in
// first N natural numbers.
using System;
 
class GFG
{
 
// Return smallest number having
// prime factors.
static int maxPrimefactorNum(int N)
{
    int []arr = new int[N + 5];
     
    // Sieve of eratosthenes method to
    // count number of prime factors.
    for (int i = 2; i * i <= N; i++)
    {
        if (arr[i] == 0)
        {
            for (int j = 2 * i; j <= N; j += i)
            {
                arr[j]++;
            }
        }
 
        arr[i] = 1;
    }
 
    int maxval = 0, maxint = 1;
 
    // Finding number having maximum
    // number of prime factor.
    for (int i = 1; i <= N; i++)
    {
        if (arr[i] > maxval)
        {
            maxval = arr[i];
            maxint = i;
        }
    }
 
    return maxint;
}
 
// Driver Code
public static void Main()
{
    int N = 40;
    Console.WriteLine(maxPrimefactorNum(N));
}
}
 
// This code is contributed
// by 29AjayKumar


PHP
 $maxval)
        {
            $maxval = $arr[$i];
            $maxint = $i;
        }
    }
 
    return $maxint;
}
 
// Driver Code
$N = 40;
echo maxPrimefactorNum($N), "\n";
 
// This code is contributed by ajit
?>


Javascript


C++
// C++ program to find integer having maximum number
// of prime factor in first N natural numbers
#include
 
using namespace std;
 
// Return smallest number having maximum prime factors.
int maxPrimefactorNum(int N)
{
    bool arr[N + 5];
    memset(arr, true, sizeof(arr));
 
    // Sieve of eratosthenes
    for (int i = 3; i*i <= N; i += 2)
    {
        if (arr[i])
            for (int j = i*i; j <= N; j+=i)
                arr[j] = false;
    }
 
    // Storing prime numbers.
    vector prime;
    prime.push_back(2);
 
    for(int i = 3; i <= N; i += 2)
        if(arr[i])
            prime.push_back(i);
 
    // Generating number having maximum prime factors.
    int i = 0, ans = 1;
    while (ans*prime[i] <= N && i < prime.size())
    {
        ans *= prime[i];
        i++;
    }
 
    return ans;
}
 
// Driven Program
int main()
{
    int N = 40;
    cout << maxPrimefactorNum(N) << endl;
    return 0;
}


Java
// Java program to find integer having maximum number
// of prime factor in first N natural numbers
import java.util.Vector;
 
public class GFG {
 
// Return smallest number having maximum prime factors.
    static int maxPrimefactorNum(int N) {
        //default value of boolean is false
        boolean arr[] = new boolean[N + 5];
 
        // Sieve of eratosthenes
        for (int i = 3; i * i <= N; i += 2) {
            if (!arr[i]) {
                for (int j = i * i; j <= N; j += i) {
                    arr[j] = true;
                }
            }
        }
 
        // Storing prime numbers.
        Vector prime = new Vector<>();
        prime.add(prime.size(), 2);
        for (int i = 3; i <= N; i += 2) {
            if (!arr[i]) {
                prime.add(prime.size(), i);
            }
        }
 
        // Generating number having maximum prime factors.
        int i = 0, ans = 1;
        while (ans * prime.get(i) <= N && i < prime.size()) {
            ans *= prime.get(i);
            i++;
        }
 
        return ans;
    }
// Driver program
 
    public static void main(String[] args) {
        int N = 40;
        System.out.println(maxPrimefactorNum(N));
    }
}


Python3
# Python3 program to find integer having
# maximum number of prime factor in first
# N natural numbers
 
# Return smallest number having
# maximum prime factors.
def maxPrimefactorNum(N):
 
    arr = [True] * (N + 5);
 
    # Sieve of eratosthenes
    i = 3;
    while (i * i <= N):
        if (arr[i]):
            for j in range(i * i, N + 1, i):
                arr[j] = False;
        i += 2;
 
    # Storing prime numbers.
    prime = [];
    prime.append(2);
 
    for i in range(3, N + 1, 2):
        if(arr[i]):
            prime.append(i);
 
    # Generating number having maximum
    # prime factors.
    i = 0;
    ans = 1;
    while (ans * prime[i] <= N and
                    i < len(prime)):
        ans *= prime[i];
        i += 1;
 
    return ans;
 
# Driver Code
N = 40;
print(maxPrimefactorNum(N));
 
# This code is contributed by mits


C#
// C# program to find integer having maximum number
// of prime factor in first N natural numbers
using System;
using System.Collections;
 
class GFG {
 
    // Return smallest number having maximum prime factors.
    static int maxPrimefactorNum(int N)
    {
        //default value of boolean is false
        bool []arr = new bool[N + 5];
        int i ;
         
        // Sieve of eratosthenes
        for (i = 3; i * i <= N; i += 2)
        {
            if (!arr[i])
            {
                for (int j = i * i; j <= N; j += i)
                {
                    arr[j] = true;
                }
            }
        }
 
        // Storing prime numbers.
        ArrayList prime = new ArrayList();
        prime.Add(2);
        for (i = 3; i <= N; i += 2)
        {
            if (!arr[i])
            {
                prime.Add(i);
            }
        }
 
        // Generating number having
        // maximum prime factors.
        int ans = 1;
        i = 0;
        while (ans * (int)prime[i] <= N && i < prime.Count)
        {
            ans *= (int)prime[i];
            i++;
        }
 
        return ans;
    }
 
    // Driver code
    public static void Main()
    {
        int N = 40;
        Console.Write(maxPrimefactorNum(N));
    }
}
 
// This code is contributed by Rajput-Ji


PHP


输出:

30

方法3(有效方法):
使用Sieve生成N之前的所有素数。现在,将连续的质数(从第一个质数开始)一个接一个地相乘,直到乘积小于N。
以下是此方法的实现:

C++

// C++ program to find integer having maximum number
// of prime factor in first N natural numbers
#include
 
using namespace std;
 
// Return smallest number having maximum prime factors.
int maxPrimefactorNum(int N)
{
    bool arr[N + 5];
    memset(arr, true, sizeof(arr));
 
    // Sieve of eratosthenes
    for (int i = 3; i*i <= N; i += 2)
    {
        if (arr[i])
            for (int j = i*i; j <= N; j+=i)
                arr[j] = false;
    }
 
    // Storing prime numbers.
    vector prime;
    prime.push_back(2);
 
    for(int i = 3; i <= N; i += 2)
        if(arr[i])
            prime.push_back(i);
 
    // Generating number having maximum prime factors.
    int i = 0, ans = 1;
    while (ans*prime[i] <= N && i < prime.size())
    {
        ans *= prime[i];
        i++;
    }
 
    return ans;
}
 
// Driven Program
int main()
{
    int N = 40;
    cout << maxPrimefactorNum(N) << endl;
    return 0;
}

Java

// Java program to find integer having maximum number
// of prime factor in first N natural numbers
import java.util.Vector;
 
public class GFG {
 
// Return smallest number having maximum prime factors.
    static int maxPrimefactorNum(int N) {
        //default value of boolean is false
        boolean arr[] = new boolean[N + 5];
 
        // Sieve of eratosthenes
        for (int i = 3; i * i <= N; i += 2) {
            if (!arr[i]) {
                for (int j = i * i; j <= N; j += i) {
                    arr[j] = true;
                }
            }
        }
 
        // Storing prime numbers.
        Vector prime = new Vector<>();
        prime.add(prime.size(), 2);
        for (int i = 3; i <= N; i += 2) {
            if (!arr[i]) {
                prime.add(prime.size(), i);
            }
        }
 
        // Generating number having maximum prime factors.
        int i = 0, ans = 1;
        while (ans * prime.get(i) <= N && i < prime.size()) {
            ans *= prime.get(i);
            i++;
        }
 
        return ans;
    }
// Driver program
 
    public static void main(String[] args) {
        int N = 40;
        System.out.println(maxPrimefactorNum(N));
    }
}

Python3

# Python3 program to find integer having
# maximum number of prime factor in first
# N natural numbers
 
# Return smallest number having
# maximum prime factors.
def maxPrimefactorNum(N):
 
    arr = [True] * (N + 5);
 
    # Sieve of eratosthenes
    i = 3;
    while (i * i <= N):
        if (arr[i]):
            for j in range(i * i, N + 1, i):
                arr[j] = False;
        i += 2;
 
    # Storing prime numbers.
    prime = [];
    prime.append(2);
 
    for i in range(3, N + 1, 2):
        if(arr[i]):
            prime.append(i);
 
    # Generating number having maximum
    # prime factors.
    i = 0;
    ans = 1;
    while (ans * prime[i] <= N and
                    i < len(prime)):
        ans *= prime[i];
        i += 1;
 
    return ans;
 
# Driver Code
N = 40;
print(maxPrimefactorNum(N));
 
# This code is contributed by mits

C#

// C# program to find integer having maximum number
// of prime factor in first N natural numbers
using System;
using System.Collections;
 
class GFG {
 
    // Return smallest number having maximum prime factors.
    static int maxPrimefactorNum(int N)
    {
        //default value of boolean is false
        bool []arr = new bool[N + 5];
        int i ;
         
        // Sieve of eratosthenes
        for (i = 3; i * i <= N; i += 2)
        {
            if (!arr[i])
            {
                for (int j = i * i; j <= N; j += i)
                {
                    arr[j] = true;
                }
            }
        }
 
        // Storing prime numbers.
        ArrayList prime = new ArrayList();
        prime.Add(2);
        for (i = 3; i <= N; i += 2)
        {
            if (!arr[i])
            {
                prime.Add(i);
            }
        }
 
        // Generating number having
        // maximum prime factors.
        int ans = 1;
        i = 0;
        while (ans * (int)prime[i] <= N && i < prime.Count)
        {
            ans *= (int)prime[i];
            i++;
        }
 
        return ans;
    }
 
    // Driver code
    public static void Main()
    {
        int N = 40;
        Console.Write(maxPrimefactorNum(N));
    }
}
 
// This code is contributed by Rajput-Ji

的PHP


输出:

30