为什么我的2不是素数?

img

img


检查了好几遍都没发现哪错了,唉
还有,可以询问一下怎么在输出结果的时候在每个数之间输出空格而最后没有空格吗?刚学没多久,感谢指点

ss 判断素数有问题,修改如下:

#include <math.h>

int ss(int x)
{
    int i;
    int flag = 1;
    for (i = 2; i <= sqrt(x); i++)  // 如果你不想引入 math.h ,直接 i <= x / 2 吧
    {
        if (x % i == 0)
        {
            flag = 0;
            break;
        }
    }
    return flag;
}

值为2的时候没走循环,你把那个return 1放循环后面试试

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7592344
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:写一个递归算法,实现字符串逆序存储,要求不另设串存储空间
  • 除此之外, 这篇博客: 指针是什么?指针怎么理解?怎么理解指针?最简单最通俗的讲解,即使不理解,记住之后也会理解代码,非常有效,希望对你有帮助!中的 下面是函数调用时的指针 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • void f (int * p)//这里上面说过了,变量名是i,但是类型是int *,可以保存其他变量的地址。
    {
    	*p=100;//上面也说过,*p就是i,i就是*p
    }
    int main()
    {
    	int i=9;//这是一个普通的定义和赋值
    	f(&i);//这里要是调用函数,用&i,把i的地址传递给函数的参数p
    	cout<<"i"<<i;//结果应该是100
    	return 0;
    }
    
    
    
  • 您还可以看一下 刘伶华老师的软件测试经典面试题剖析课程中的 工作中有遇到什么困难,怎么解决的?小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    关于2不是素数的问题,是因为判断素数的方法出现了问题,常见的方法是从2到该数的平方根进行遍历,判断是否有因子,但是2的平方根仍为2,因此会错误地将2判断为非素数。解决方法是特判2,将2单独判断,判断其他数则从3开始遍历,每次加2。

    具体代码实现如下:

    def is_prime(num):
        """判断一个数是否为素数"""
        if num == 2:  # 特判2
            return True
        if num < 2 or num % 2 == 0:  # 排除小于2以及偶数
            return False
        for i in range(3, int(num ** 0.5) + 1, 2):  # 从3到num的平方根进行遍历,每次加2
            if num % i == 0:
                return False
        return True
    

    关于输出空格的问题,可以在每个数输出时加上空格,最后一个数单独输出即可。代码实现如下:

    nums = [1, 2, 3, 4, 5]
    for i in range(len(nums)):
        if i != len(nums) - 1:  # 当前不是最后一个数,加上空格
            print(nums[i], end=' ')
        else:  # 当前是最后一个数,单独输出
            print(nums[i])