【蓝蓝计算机考研算法】-day01-判断该数是否为素数

257 阅读2分钟

# 1. 从键盘输入一个整数,判断该数是否为素数

  • 什么是素数

质数又称素数。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数叫质数;否则称为合数(规定1既不是质数也不是合数)。

  • 思路

对等于一的进行判断处理,利用for循环对输入的数都进行除一遍,若能除尽(取模等于0),则不是质数。

  • 具体实现

#include <iostream>
int main()
{
	int a = 0;
	printf("请输入一个整数 ");
	scanf_s("%d",&a);
	if (a <= 1)//排除1及比1小的数
		return 0;
	for (int i = 2; i < a; i++)//循环检查是不是质数
	{
		if (a % i == 0)
		{
			printf("该数不是质数 ");
			return 0;
		}
	}
	printf("该数是质数 ");
	return 0;
 }
  • 运行结果

请输入一个整数 6
该数不是质数
  • 复杂度分析

    • 时间复杂度: 使用了一个for循环,因此时间复杂度为T(n);
    • 空间复杂度:没有用到额外存储空间,所以空间复杂度为O(1);

2、求解从2到20000的所有完全数。

  • 什么是完全数

完全数,又称完美数完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

  • 思路

  • 1.利用for循环,确定数的范围;
  • 2.嵌套for循环来寻找该数的因子,利用取余做判断,能整除即该数的因子
  • 3.将因子进行累加后与原数进行比较,相等既是完全数,否则不是,
  • 具体实现

#include <iostream>
int main()
{
int sum;//累加因子数
	printf("2-20000的完全数有: ");
	for (int i = 2; i <= 20000; i++)
	{
		sum = 0;//每次将数归零
		for (int j = 1; j < i; j++) {//j是用来寻找该数的因子,即从1到i-1范围内能整除i的数
			if (i % j == 0)//判断j是否为i的因子
				sum = sum + j;
		}
		if (sum == i)//判断因子之和是否和原数相等
			printf("%d , ", i);
	}
	return 0;
 }
  • 运行结果

2-20000的完全数有: 6 , 28 , 496 , 8128 ,
  • 复杂度分析

    • 时间复杂度: 使用了两个个for循环嵌套,因此时间复杂度为n的平方即T(n^2);
    • 空间复杂度:没有用到额外存储空间,所以空间复杂度为O(1);