循环嵌套计算是否为质数
输入数字版本:
#include<stdio.h>
#include<limits.h>
#include<math.h>
int main()
{
int Num = 0, i = 0, k = 0;
printf("Enter number(>3):\n");
scanf("%d", &Num);
k = sqrt(Num);
if (Num > 3 && k <= INT_MAX)
{
for (i = 2; k < Num; i++)
{
if (Num%i == 0)//此时说明输入的数字能被某一个数字相除无余数,并且由于限制,循环数i肯定小于输入的数字,所以可由此判断此数字是否为素数(质数)
break;
}
if (i < Num) printf("Number [%d] not is prime!", Num);
else printf("Number [%d] is prime!", Num);//因为for 只要 i小于输入的Num 就继续执行 并且i++ 所以数字一定比输入的数字大1
}
else
{
printf("You enter data error!");
}
return 0;
}
划定范围版本:
#include<stdio.h> //计算100~200有哪些数字是质数
#include<math.h>
int main()
{
int i = 0, Num = 0, k = 0, Result=0;
for (Num = 100; Num <= 200; Num++)//当前运行的数字
{
k = sqrt(Num);//计算Num的平方根
for (i = 2; i < k; i++)//若除到2~Num的平方根 都没有余数得0,则是质数
{
if (Num%i == 0)
{
Result = 0;//不是质数
break;
}
else
{
Result = 1;//是质数
break;
}
}
if (Result == 1)
{
printf("Number [%d] is prime!\n", Num);
}
else
{
printf("Number [%d] not is prime!\n", Num);
}
}
return 0;
}
自定义范围版:
#include<stdio.h>
#include<math.h>
#include<limits.h>
int main()
{
int Min = 0, Max = 0, i = 0, j = 0, k = 0, Num = 0;
printf("Enter range(Number1~Number2):\n");
scanf("%d~%d", &Min, &Max);
if (Min > 0 && Max <= INT_MAX)//判断是否输入正确数字和非法字符。
{
for (Num = Min; Num <= Max; Num++)
{
k = sqrt(Num);
for (i = 2; i < k; i++)
{
if (Num%i == 0)
{
break;//提前跳出循环,应合 if (i < k) 来判断是否为质数,提前跳出说明有数字能整除当前运行数字。
}
}
if (i < k)
{
printf("Number [%d] not is prime!\n", Num);
}
else
{
printf("Number [%d] is prime!\n", Num);
}
}
}
else
{
setbuf(stdin, NULL);//清除数据防止出错
printf("You enter data error\n");
return 0;
}
}