判断一个数是否是素数
判断一个数是否是素数
源程序代码:
/*
2017年3月8日21:15:32
功能:判断一个数是否是素数
*/
#include "stdio.h"
int main ()
{
char s[100] ="YES";
char s1[100] = "NO";
int n;
printf ("Please enter a data: ");
scanf ("%d",&n);
for (int i = 2; i < n ; i++)
{
if (n % i != 0)
continue;
else
{
printf ("the result is %s\n",s1);
break;
}
}
if(i == n)
printf("the number is %s\n",s);
return 0;
}
/*
总结:
在VC++6.0中显示的结果:
——————————————————————————
Please enter a data:9
the result is NO
——————————————————————————
*/
优化算法:
# include <stdio.h>
int main(void)
{
int fun(int); //函数声明;
int n;
printf("素数判定,请输入一个整数:");
scanf("%d", &n);
if(fun(n)) //函数返回值为1,为素数,否则不是素数;
printf("%d是素数\n", n);
else
printf("%d不是素数\n", n);
return 0;
}
int fun(int x) //函数可以在主函数内声明,但是不能在函数内再定义一个函数,否则出错;
{
int i;
for(i=2; i<x; i++)
{
if(x%i == 0) //素数只能被1和他本身整除
break;
}
if(i == x) //当i==x,说明x%i(i<x)的所有值都不等于0,x就是素数;
return 1;
else
return 0;
}
扩展:用筛选法求1-100之间的素数
/*
2017年6月30日19:46:07
功能:用筛选法求1-100之间的素数
*/
# include <stdio.h>
# define N 100
int main(void)
{
int a[N], b[N]; //定义两个数组
int i, j, count = 0;
for(i=1; i<N; i++)
a[i] = 0; //初始化所有数
/*若筛中最小数的标志为0,则基为素数,将其存入素数数组b,素数个数+1*/
for(j=2; j<=N; j++)
if(a[j-1] == 0) //没有排除的数值为还是0
{
b[count] = j;
for(i=j; i<=N; i=i+j)
a[i-1] = 1; //将排除的数赋值为1(分别是2的倍数、3的倍数..到10的倍数的号)
count++;
}
for(i=1; i<=count; i++)
{
printf("%-5d",b[i-1]); //每5个数为一组输出
if(i%5==0)
printf("\n");
}
return 0;
}
/*
在VC++6.0中显示的结果为:
----------------
2 3 5 7 11
13 17 19 23 29
31 37 41 43 47
53 59 61 67 71
73 79 83 89 97
----------------
*/