给定整数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