目录
题目
编写素数函数,在主函数从键盘输入一个整数,调用该函数,在主函数中输出是否是素数。
分析思路
法一:
判断是否为素数,我们只需要用 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);
else
printf("\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);
else
printf("\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;
}
希望这篇文章对大家有用,如有错误请指出,我会改正哒。