1. 如何判断一个整数x是否是素数?
#include<stdio.h>
short IsPrimeNumber(short);
int main()
{
short n;
printf("请输入一个正整数: ");
/* 加入输入容错机制 */
while(scanf("%hd", &n) != 1 || n < 1)
{
while(getchar() != '\n') ;
printf("请输入合法数据.\n");
printf("请输入一个正整数: ");
}
IsPrimeNumber(n) == 1 ? printf("%hd是素数.\n", n) : printf("%hd不是素数.\n", n);
/* */
return 0;
}
/* 判断整数x是否为素数: 是素数返回1, 否则返回0 */
short IsPrimeNumber(short x)
{
if(x == 1)
{
/* 特殊情况特殊处理 */
/* 不加此条语句, 1就会被判定为素数, 然而1并不是素数, 最小的素数为2 */
/* 灵活运用逆否命题的思想 */
return 0;
}
short i = 2;
while(i < x)
{
if(x % i == 0)
{
return 0;
}
i ++;
}
return 1;
}
其实在判断一个整数是否为素数时, 还可以进一步优化求解算法, 即只判断到sqrt(x)即可(而不必一直判断到x-1).
#include<stdio.h>
#include<math.h>
short IsPrimeNumber(short);
int main()
{
short n;
printf("请输入一个正整数: ");
/* 加入输入容错机制 */
while(scanf("%hd", &n) != 1 || n < 1)
{