📌  相关文章
📜  生成满足给定条件的N个整数

📅  最后修改于: 2021-04-21 21:30:13             🧑  作者: Mango

给定整数N ,任务是生成具有以下属性的大小为N的数组:

  1. 没有两个元素彼此分开。
  2. 每个奇数子集都有奇数和,而每个偶数子集都有偶数和。

例子:

方法:为了满足每个奇数子集具有奇数和而偶数子集具有偶数和的条件,每个元素必须为奇数,并且为了使任何两个元素彼此不相除,它们必须为质数。因此,现在的任务是找到前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