给定正整数N,任务是检查它是否是Proth数。如果给定的编号是Proth编号,则打印“是”,否则打印“否”。
Proth Number :在数学中,Proth number是以下形式的正整数
n = k * 2n + 1
其中k是一个奇数正整数, n是一个正整数,使得2 n > k 。
前几个Proth数字是–
3, 5, 9, 13, 17, 25, 33, 41, 49, ……
例子:
Input: 25
Output: YES
Taking k= 3 and n= 3,
25 can be expressed in the form of
(k.2n + 1) as (3.23 + 1)
Input: 73
Output: NO
Taking k=9 and n=3
73 can be expressed in the form of
(k.2n + 1 ) as (9.23 + 1)
But 23 is less than 9
(it should be greater than k to be Proth Number)
方法
- 从数字中减去1。如果给定的数是proth数,则将以k * 2 n的形式给出一个数。
- 现在,循环遍历所有从k = 1到n / k的奇数,并检查k是否可以将n除以(n / k)为2的幂。
- 如果找到,则打印“是”
- 如果找不到这样的k值,则打印’NO’
以下是上述想法的实现
C++
// CPP program to check Proth number
#include
using namespace std;
// Utility function to check power of two
bool isPowerOfTwo(int n)
{
return (n && !(n & (n - 1)));
}
// Function to check if the
// Given number is Proth number or not
bool isProthNumber(int n)
{
int k = 1;
while (k < (n / k)) {
// check if k divides n or not
if (n % k == 0) {
// Check if n/k is power of 2 or not
if (isPowerOfTwo(n / k))
return true;
}
// update k to next odd number
k = k + 2;
}
// If we reach here means
// there exists no value of K
// Such that k is odd number
// and n/k is a power of 2 greater than k
return false;
}
// Driver code
int main()
{
// Get n
int n = 25;
// Check n for Proth Number
if (isProthNumber(n - 1))
cout << "YES";
else
cout << "NO";
return 0;
}
Java
// Java program to check for Proth number
class GFG {
// Utility function to check power of two
static boolean isPowerOfTwo(int n)
{
return n != 0 && ((n & (n - 1)) == 0);
}
// Function to check if the
// Given number is Proth number or not
static boolean isProthNumber(int n)
{
int k = 1;
while (k < (n / k)) {
// check if k divides n or not
if (n % k == 0) {
// Check if n/k is power of 2 or not
if (isPowerOfTwo(n / k))
return true;
}
// update k to next odd number
k = k + 2;
}
// If we reach here means
// there exists no value of K
// Such that k is odd number
// and n/k is a power of 2 greater than k
return false;
}
// Driver code
public static void main(String[] args)
{
// Get n
int n = 25;
// Check n for Proth Number
if (isProthNumber(n - 1))
System.out.println("YES");
else
System.out.println("NO");
}
}
Python3
# Python3 program to check for Proth number
# Utility funtion to Check
# power of two
def isPowerOfTwo(n):
return (n and (not(n & (n - 1))))
# Function to check if the
# Given number is Proth number or not
def isProthNumber( n):
k = 1
while(k < (n//k)):
# check if k divides n or not
if(n % k == 0):
# Check if n / k is power of 2 or not
if(isPowerOfTwo(n//k)):
return True
# update k to next odd number
k = k + 2
# If we reach here means
# there exists no value of K
# Such that k is odd number
# and n / k is a power of 2 greater than k
return False
# Driver code
# Get n
int n = 25;
# Check n for Proth Number
if(isProthNumber(n-1)):
print("YES");
else:
print("NO");
C#
// C# program to check Proth number
using System;
class GFG {
// Utility function to check power of two
static bool isPowerOfTwo(int n)
{
return n != 0 && ((n & (n - 1)) == 0);
}
// Function to check if the
// Given number is Proth number or not
static bool isProthNumber(int n)
{
int k = 1;
while (k < (n / k)) {
// check if k divides n or not
if (n % k == 0) {
// Check if n/k is power of 2 or not
if (isPowerOfTwo(n / k))
return true;
}
// update k to next odd number
k = k + 2;
}
// If we reach here means
// there exists no value of K
// Such that k is odd number
// and n/k is a power of 2 greater than k
return false;
}
// Driver code
public static void Main()
{
// Get n
int n = 25;
// Check n for Proth Number
if (isProthNumber(n - 1))
Console.WriteLine("YES");
else
Console.WriteLine("NO");
}
}
PHP
Javascript
输出:
YES