📜  计算字符值为素数的字符串中的字符

📅  最后修改于: 2022-05-13 01:57:08.736000             🧑  作者: Mango

计算字符值为素数的字符串中的字符

给定一个字符串S 。任务是计算并打印字符串中 ASCII 值为素数的字符数。

例子:

方法:这个想法是使用 Eratosthenes 的 Sieve 生成所有素数,直到字符串S 的字符的最大 ASCII 值。现在,迭代字符串并获取每个字符的 ASCII 值。如果 ASCII 值是素数,则增加count 。最后,打印count

下面是上述方法的实现:

C++
// C++ implementation of above approach
#include 
using namespace std;
#define max_val 257
 
// Function to find prime characters in the string
int PrimeCharacters(string s)
{
 
    // USE SIEVE TO FIND ALL PRIME NUMBERS LESS
    // THAN OR EQUAL TO max_val
    // Create a Boolean array "prime[0..n]". A
    // value in prime[i] will finally be false
    // if i is Not a prime, else true.
    vector prime(max_val + 1, true);
 
    // 0 and 1 are not primes
    prime[0] = false;
    prime[1] = false;
    for (int p = 2; p * p <= max_val; p++) {
 
        // If prime[p] is not changed, then
        // it is a prime
        if (prime[p] == true) {
 
            // Update all multiples of p
            for (int i = p * 2; i <= max_val; i += p)
                prime[i] = false;
        }
    }
 
    int count = 0;
 
    // Traverse all the characters
    for (int i = 0; i < s.length(); ++i) {
        if (prime[int(s[i])])
            count++;
    }
 
    return count;
}
 
// Driver program
int main()
{
    string S = "geeksforgeeks";
 
    // print required answer
    cout << PrimeCharacters(S);
 
    return 0;
}


Java
// Java implementation of above approach
class Solution
{
static final int max_val=257;
 
// Function to find prime characters in the String
static int PrimeCharacters(String s)
{
 
    // USE SIEVE TO FIND ALL PRIME NUMBERS LESS
    // THAN OR EQUAL TO max_val
    // Create a Boolean array "prime[0..n]". A
    // value in prime[i] will finally be false
    // if i is Not a prime, else true.
    boolean prime[]= new boolean[max_val+1];
     
    //initialize the value
    for(int i=0;i<=max_val;i++)
    prime[i]=true;
 
    // 0 and 1 are not primes
    prime[0] = false;
    prime[1] = false;
    for (int p = 2; p * p <= max_val; p++) {
 
        // If prime[p] is not changed, then
        // it is a prime
        if (prime[p] == true) {
 
            // Update all multiples of p
            for (int i = p * 2; i <= max_val; i += p)
                prime[i] = false;
        }
    }
 
    int count = 0;
 
    // Traverse all the characters
    for (int i = 0; i < s.length(); ++i) {
        if (prime[(int)(s.charAt(i))])
            count++;
    }
 
    return count;
}
 
// Driver program
public static void main(String args[])
{
    String S = "geeksforgeeks";
 
    // print required answer
    System.out.print( PrimeCharacters(S));
 
}
}
//contributed by Arnab Kundu


Python3
# Python3 implementation of above approach
 
from math import sqrt
 
max_val = 257
 
# Function to find prime characters in the string
def PrimeCharacters(s) :
 
    # USE SIEVE TO FIND ALL PRIME NUMBERS LESS
    # THAN OR EQUAL TO max_val
    # Create a Boolean array "prime[0..n]". A
    # value in prime[i] will finally be false
    # if i is Not a prime, else true.
    prime = [True] * (max_val + 1)
 
    # 0 and 1 are not primes
    prime[0] = False
    prime[1] = False
    for p in range(2, int(sqrt(max_val)) + 1) :
 
        # If prime[p] is not changed, then
        # it is a prime
        if (prime[p] == True) :
 
            # Update all multiples of p
            for i in range(2*p ,max_val + 1, p) :
                prime[i] = False
 
    count = 0
 
    # Traverse all the characters
    for i in range(len(s)) :
        if (prime[ord(s[i])]) :
            count += 1
             
    return count
 
# Driver program
if __name__ == "__main__" :
 
    S = "geeksforgeeks";
 
    # print required answer
    print(PrimeCharacters(S))
 
# This code is contributed by Ryuga


C#
// C# implementation of above approach
using System;
class GFG{
     
static readonly int max_val = 257;
 
// Function to find prime characters in the String
static int PrimeCharacters(String s)
{
    // USE SIEVE TO FIND ALL PRIME NUMBERS LESS
    // THAN OR EQUAL TO max_val
    // Create a Boolean array "prime[0..n]". A
    // value in prime[i] will finally be false
    // if i is Not a prime, else true.
    bool []prime = new bool[max_val + 1];
 
    //initialize the value
    for(int i = 0; i <= max_val; i++)
    prime[i] = true;
 
    // 0 and 1 are not primes
    prime[0] = false;
    prime[1] = false;
    for (int p = 2; p * p <= max_val; p++)
    {
        // If prime[p] is not changed, then
        // it is a prime
        if (prime[p] == true)
        {
            // Update all multiples of p
            for (int i = p * 2; i <= max_val; i += p)
            prime[i] = false;
             
        }
         
    }
     
    int count = 0;
     
    // Traverse all the characters
    for (int i = 0; i < s.Length; ++i)
    {
        if (prime[(int)(s[i])])
        count++;
         
    }
    return count;
     
}
 
// Driver Code
public static void Main()
{
    String S = "geeksforgeeks";
     
    // print required answer
    Console.Write( PrimeCharacters(S));
     
}
}
 
// This code is contributed by PrinciRaj1992


Javascript


输出:
8

时间复杂度: O(max_val*log(log(max_val)))
辅助空间: O(max_val)