素数的定义:只能被常数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()
{
	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

        以上便是几种判断素数的方法

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐