素数判断,小明给出一个特殊的素数

素数判断
描述

小明给出了一个特殊的素数,完全素数,这个数是一个素数,且每次去掉这个数的个位后,还是素数,例如2333就是完全素数233,23,2均是素数。现在给你一些数,让你判断其是不是完全素数,是输出YES,不是输出NO。

day15-03.zip

输入
第一行一个整数T(T<=1000),表示数据组数

其后T行,每行一个整数,表示要判断的数值a(a<=1000000)

输出
T行,每行一个YES或NO

输入样例 1

3
46
23
293
输出样例

img

,样例不对

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)。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^