给定整数N ,任务是检查N是否为弱质数。
Weakly Prime Numbers are prime numbers which cannot be turned into a prime by changing a single digit.
例子:
Input: N = 294001
Output: Yes
Input: N = 30
Output: No
解决方案:如果该数字是复合数字,则返回false,否则我们将用每个位置的0到9的所有可能数字将数字的每个数字一一替换,如果由此数字形成的数字是质数,则返回false。
C++
// C++ Program to check if n
// is Weakly Prime Number
#include
using namespace std;
// function to check if N is prime
bool isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0
|| n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i = i + 6)
if (n % i == 0
|| n % (i + 2) == 0)
return false;
return true;
}
// function to check if n
// is a Weakly Prime Number
bool isWeaklyPrimeNum(int N)
{
// number should be prime
if (!isPrime(N))
return false;
// converting N to string
string s = to_string(N);
// loop to change digit
// at every character
// one by one.
for (int j = 0; j < s.length(); j++) {
string str = s;
// loop to store every
// digit one by one
// at index j
for (int i = 0; i <= 9; i++) {
char c = '0' + i;
str[j] = c;
int Num = stoi(str);
if (str[j] != s[j]
&& isPrime(Num)) {
return false;
}
}
}
return true;
}
// Driver code
int main()
{
int n = 294001;
if (isWeaklyPrimeNum(n))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to check if n
// is Weakly Prime Number
class GFG{
// Function to check if N is prime
static boolean isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0)
return false;
for(int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;
return true;
}
// Function to check if n
// is a Weakly Prime Number
static boolean isWeaklyPrimeNum(int N)
{
// Number should be prime
if (!isPrime(N))
return false;
// Converting N to String
String s = String.valueOf(N);
// Loop to change digit
// at every character
// one by one.
for(int j = 0; j < s.length(); j++)
{
char []str = s.toCharArray();
// Loop to store every
// digit one by one
// at index j
for(int i = 0; i <= 9; i++)
{
char c = (char)('0' + i);
str[j] = c;
int Num = Integer.valueOf(
String.valueOf(str));
if (str[j] != s.charAt(j) &&
isPrime(Num))
{
return false;
}
}
}
return true;
}
// Driver code
public static void main(String[] args)
{
int n = 294001;
if (isWeaklyPrimeNum(n))
System.out.print("Yes");
else
System.out.print("No");
}
}
// This code is contributed by Princi Singh
Python3
# Python3 Program to check if n
# is weakly prime Number
# function to check if N is prime
def isPrime(n):
# Corner cases
if (n <= 1) :
return False
if (n <= 3) :
return True
# This is checked so that we can skip
# middle five numbers in below loop
if (n % 2 == 0 or n % 3 == 0):
return False
for i in range(5, int(n**0.5) + 1, 6):
if (n % i == 0 or n % (i + 2) == 0):
return False
return True
# function to check if n
# is a weakly prime Number
def isWeaklyPrimeNum(N):
# number should be prime
if (isPrime(N)==False) :
return False
# converting N to string
s = str(N)
# loop to change digit at every character
# one by one.
for j in range(len(s)):
str1 = s
# loop to store every digit one by one
# at index j
for i in range(10):
c = str(i)
str1 = str1[ : j] + c + str1[j + 1 : ]
Num = int(str1)
if (str1[j] != s[j] and isPrime(Num)) :
return False
return True
# Driver code
n = 294001
if (isWeaklyPrimeNum(n)):
print("Yes")
else:
print("No")
# This code is contributed by Vishal Maurya.
C#
// C# program to check if n
// is Weakly Prime Number
using System;
class GFG{
// Function to check if N is prime
static bool isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0)
return false;
for(int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;
return true;
}
// Function to check if n
// is a Weakly Prime Number
static bool isWeaklyPrimeNum(int N)
{
// Number should be prime
if (!isPrime(N))
return false;
// Converting N to String
String s = String.Join("", N);
// Loop to change digit
// at every character
// one by one.
for(int j = 0; j < s.Length; j++)
{
char []str = s.ToCharArray();
// Loop to store every
// digit one by one
// at index j
for(int i = 0; i <= 9; i++)
{
char c = (char)('0' + i);
str[j] = c;
int Num = Int32.Parse(String.Join("", str));
if (str[j] != s[j] && isPrime(Num))
{
return false;
}
}
}
return true;
}
// Driver code
public static void Main(String[] args)
{
int n = 294001;
if (isWeaklyPrimeNum(n))
Console.Write("Yes");
else
Console.Write("No");
}
}
// This code is contributed by Princi Singh
输出:
Yes
参考:http://oeis.org/A050249