# 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);