目录
题目
分析思路
法一:
法二:
代码
法一
法二
题目
编写素数函数,在主函数从键盘输入一个整数,调用该函数,在主函数中输出是否是素数。
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
分析思路
法一:
判断是否为素数,我们只需要用 i 与 2 ~ (i - 1 ) 的数字相除,如果不能整除就为素数。我们假设一开始都为素数:flag = 1;若求出不是素数,则 flag = 0;break;因为 flag 为 1 或者 0 ,所以返回值直接 return flag;
法二:
我们在法一的基础上稍加改动一下:
当一个数 m 可以用 m=a * b 表示时,a 和 b 中至少有一个数 小于等于 m−−√m。
例如:16,16 = 4 * 4 或 16 = 2 * 8;
举个反例:11,数字11就只能 1 * 11=11;
知道了这个原理,我们就会发现:其实没有必要从 2 开始除到 i - 1 ,只需要除到m−−√m。
又因为开平方出来的数字不一定是整数,所以我们可以强制 (int) i 。
当然啦,用了开平方的函数记得添加头文件:#include <math.h>
代码
法一
#include<stdio.h>
void main()
{int x;printf("请输入一个整数:");scanf("%d", &x);if (func(x) == 1)printf("\n%d 是素数",x);elseprintf("\n%d 不是素数",x);
}int func(int x)
{int flag = 1;int i = 0;for (i = 2; i <= (x - 1); i++){if (x % i == 0){flag = 0;break;}}return flag;}
法二
#include<stdio.h>
#include<math.h>
void main()
{int x;printf("请输入一个整数:");scanf("%d", &x);if (func(x) == 1)printf("\n%d 是素数",x);elseprintf("\n%d 不是素数",x);
}int func(int x)
{int flag = 1;int i = 0;for (i = 2; i <= (int)sqrt(x); i++){if (x % i == 0){flag = 0;break;}}return flag;}
希望这篇文章对大家有用,如有错误请指出,我会改正哒。