C语⾔判断素数的⼏种⽅法
素数的定义:只能被常数1或⾃⼰整除,不能被其他整数整除的正整数。
1.从2——x-1循环
#include<stdio.h>
int main()
{
int x;
int IsPrime = 1; //定义变量IsPrime并赋初值1 即x为素数
scanf_s("%d", &x);
for (int i = 2; i < x; i++)
{
if (x % i == 0)
{
IsPrime = 0;
break;
}
}
if (IsPrime == 0)
printf("%d is not a prime number", x);
else
printf("%d is a prime number", x);
return 0;
}
测试结果:
23
23 is a prime number
需要注意的是定义的变量IsPrime赋初值为1;其次是for循环中i是从2开始增加。另外加⼀句:break;与continue;的区别在于:程序执⾏到break;语句时,会跳出当前循环即结束当前循环;⽽continue;是不再执⾏当前循环内continue;语句之后的部分。
拓展:利⽤循环嵌套输出n以内的素数
#include<stdio.h>
int main()
{
int n;
int count=0;
int i,j;
scanf_s("%d",&n);
for(i=1;i<=n;i++)
{
int IsPrime=1;
for( j=2;j<n;j++)
{
if(i%j==0)
IsPrime=0;
break;
}
if (IsPrime == 1)
{
printf("%d\t", i);
count++;
if (count % 5 == 0) //每5个输出做⼀⾏
printf("\n");
}
}
return 0;
}
测试结果:
50
1 3 5 7 9
11 13 15 17 19
21 23 25 27 29
31 33 35 37 39
41 43 45 47 49
2.除去偶数之后,3——x-1,每次加2 定义⼀个判断是否为素数的函数
int IsPrime(int x)
{
int ret=1; //ret含义与之前的变量IsPrime相同 if(x==1||(x!=2&&x%2==0))
ret=0;
for(int i=3;i<x;i+=2)
{
if(x%i==0)
{
ret=0;
break;
}
}
return ret;
}
3.通过sqrt()函数
int IsPrime(int x)
{
int ret=1; //ret含义与之前的变量IsPrime相同
if(x==1||(x!=2&&x%2==0))
ret=0;
for(int i=3;i<sqrt(x);i+=2) //循环到sqrt(x)
{
if(x%i==0)
{
ret=0;
break;
}
}
return ret;
}
//使⽤sqrt()函数需要包含头⽂件<math.h>
4.通过判断是否能被已经判断过的并且<x的素数整除,利⽤数组
#include<stdio.h>
#define N 50
int IsPrime(int x, int known[], int number);
int main()
c++判断素数
{
int i = 3;
int count = 1;
int array[N]={2};
while (count < N)
{
if (IsPrime(i, array, count))
array[count++] = i;
i++;
}
for (i = 0; i < N; i++)
{
printf("%d", array[i]);
if ((i + 1) % 5 == 0)
printf("\n");
else
printf("\t");
}
return 0;
}
int IsPrime(int x, int known[], int number)
{
int ret = 1;
int i;
for ( i = 0; i < number; i++)
{
if (x % known[i] == 0)
{
ret = 0;
break;
}
}
return ret;
}
测试结果:
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
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229
以上便是⼏种判断素数的⽅法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论