素数判断
描述
小明给出了一个特殊的素数,完全素数,这个数是一个素数,且每次去掉这个数的个位后,还是素数,例如2333就是完全素数233,23,2均是素数。现在给你一些数,让你判断其是不是完全素数,是输出YES,不是输出NO。
day15-03.zip
输入
第一行一个整数T(T<=1000),表示数据组数
其后T行,每行一个整数,表示要判断的数值a(a<=1000000)
输出
T行,每行一个YES或NO
输入样例 1
3
46
23
293
输出样例
int T;
cin >> T;
for (int i = 0; i < T; i++)
{
int a;
bool b = true;
cin >> a;
while (a > 0)
{
for (int i = 2; i * i <= a; i++)
{
if (a % i == 0)
{
b = false;
break;
}
}
a = a / 10;
}
if (b)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
【以下回答由 GPT 生成】
解决方案:
步骤1: 定义一个函数is_prime(n),用来判断一个数是否为素数。该函数的输入参数为一个整数n,输出为一个布尔值(True表示n为素数,False表示n不是素数)。
步骤2: 定义一个函数is_complete_prime(n),用来判断一个数是否为完全素数。该函数的输入参数为一个整数n,输出为一个布尔值(True表示n为完全素数,False表示n不是完全素数)。
步骤3: 编写主函数,读取输入数据,调用is_complete_prime函数判断每个数是否为完全素数,并输出结果。
具体实现如下:
```python
import math
# 判断一个数是否为素数
def is_prime(n):
if n < 2: # 小于2的数不是素数
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0: # 存在一个因子能整除该数,说明不是素数
return False
return True
# 判断一个数是否为完全素数
def is_complete_prime(n):
while n >= 10:
if not is_prime(n): # 若n本身不是素数,返回False
return False
n = n // 10 # 去除n的个位数
return is_prime(n) # 判断去除个位数后的数是否为素数
if __name__ == '__main__':
T = int(input()) # 读取数据组数
for _ in range(T):
a = int(input()) # 读取数值a
if is_complete_prime(a):
print("YES")
else:
print("NO")
复杂度分析:
时间复杂度: 对于每个数值a,需要调用is_complete_prime函数判断是否为完全素数,is_complete_prime的时间复杂度为O(logN),其中N为a的位数。因此,总的时间复杂度为O(T*logN),其中T为数据组数。
空间复杂度: 使用了常数个的变量,因此空间复杂度为O(1)。
【相关推荐】