给定整数N ,任务是生成具有以下属性的大小为N的数组:
- 没有两个元素彼此分开。
- 每个奇数子集都有奇数和,而每个偶数子集都有偶数和。
例子:
Input: N = 3
Output: 3 5 7
No two element divide each other and the sum
of all the odd subsets {3}, {5}, {7} and {3, 5, 7} is odd.
Sum of all the even subsets is even i.e. {3, 5}, {3, 7} and {5, 7}
Input: N = 6
Output: 3 5 7 11 13 17
方法:为了满足每个奇数子集具有奇数和而偶数子集具有偶数和的条件,每个元素必须为奇数,并且为了使任何两个元素彼此不相除,它们必须为质数。因此,现在的任务是找到前N个奇数质数。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
#define MAX 1000000
// Create a boolean array "prime[0..n]" and initialize
// all entries it as true. A value in prime[i] will
// finally be false if i is Not a prime, else true.
bool prime[MAX + 1];
void SieveOfEratosthenes()
{
memset(prime, true, sizeof(prime));
prime[1] = false;
for (int p = 2; p * p <= MAX; p++) {
// If prime[p] is not changed, then it is a prime
if (prime[p] == true) {
// Set all multiples of p to non-prime
for (int i = p * 2; i <= MAX; i += p)
prime[i] = false;
}
}
}
// Function to find the first
// n odd prime numbers
void solve(int n)
{
// To store the current count
// of prime numbers
int count = 0;
// Starting with 3 as 2 is
// an even prime number
for (int i = 3; count < n; i++) {
// If i is prime
if (prime[i]) {
// Print i and increment count
cout << i << " ";
count++;
}
}
}
// Driver code
int main()
{
// Create the sieve
SieveOfEratosthenes();
int n = 6;
solve(n);
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
static int MAX = 1000000;
// Create a boolean array "prime[0..n]" and
// initialize all entries it as true.
// A value in prime[i] will finally be false
// if i is Not a prime, else true.
static boolean []prime = new boolean[MAX + 1];
static void SieveOfEratosthenes()
{
for (int i = 0; i <= MAX; i ++)
prime[i] = true;
prime[1] = false;
for (int p = 2; p * p <= MAX; p++)
{
// If prime[p] is not changed,
// then it is a prime
if (prime[p] == true)
{
// Set all multiples of p to non-prime
for (int i = p * 2; i <= MAX; i += p)
prime[i] = false;
}
}
}
// Function to find the first
// n odd prime numbers
static void solve(int n)
{
// To store the current count
// of prime numbers
int count = 0;
// Starting with 3 as 2 is
// an even prime number
for (int i = 3; count < n; i++)
{
// If i is prime
if (prime[i])
{
// Print i and increment count
System.out.print(i + " ");
count++;
}
}
}
// Driver code
public static void main(String[] args)
{
// Create the sieve
SieveOfEratosthenes();
int n = 6;
solve(n);
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 implementation of the approach
from math import sqrt
MAX = 1000000
# Create a boolean array "prime[0..n]" and
# initialize all entries it as true.
# A value in prime[i] will finally be false
# if i is Not a prime, else true.
prime = [True] * (MAX + 1);
def SieveOfEratosthenes() :
prime[1] = False;
for p in range(2, int(sqrt(MAX)) + 1) :
# If prime[p] is not changed,
# then it is a prime
if (prime[p] == True) :
# Set all multiples of p to non-prime
for i in range(p * 2, MAX + 1, p) :
prime[i] = False;
# Function to find the first
# n odd prime numbers
def solve(n) :
# To store the current count
# of prime numbers
count = 0;
i = 3;
# Starting with 3 as 2 is
# an even prime number
while count < n :
# If i is prime
if (prime[i]) :
# Print i and increment count
print(i, end = " ");
count += 1;
i += 1
# Driver code
if __name__ == "__main__" :
# Create the sieve
SieveOfEratosthenes();
n = 6;
solve(n);
# This code is contributed by AnkitRai01
C#
// C# implementation of the above approach
using System;
class GFG
{
static int MAX = 1000000;
// Create a boolean array "prime[0..n]" and
// initialize all entries it as true.
// A value in prime[i] will finally be false
// if i is Not a prime, else true.
static bool []prime = new bool[MAX + 1];
static void SieveOfEratosthenes()
{
for (int i = 0; i <= MAX; i ++)
prime[i] = true;
prime[1] = false;
for (int p = 2; p * p <= MAX; p++)
{
// If prime[p] is not changed,
// then it is a prime
if (prime[p] == true)
{
// Set all multiples of p to non-prime
for (int i = p * 2; i <= MAX; i += p)
prime[i] = false;
}
}
}
// Function to find the first
// n odd prime numbers
static void solve(int n)
{
// To store the current count
// of prime numbers
int count = 0;
// Starting with 3 as 2 is
// an even prime number
for (int i = 3; count < n; i++)
{
// If i is prime
if (prime[i])
{
// Print i and increment count
Console.Write(i + " ");
count++;
}
}
}
// Driver code
public static void Main(String[] args)
{
// Create the sieve
SieveOfEratosthenes();
int n = 6;
solve(n);
}
}
// This code is contributed by 29AjayKumar
输出:
3 5 7 11 13 17