C language is determined whether or not a prime number

Method One:
brute force, shortcomings, slow
Code:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int judge(int n)//判断一个数是不是素数
{
    int count=0;
    int m=sqrt(n);//只需要检查到该数的平方根即可,
    for(int i=2;i<=m;i++)
    {
        if(n%i==0)
        {
            ++count;
            break;
        }
    }
    if(count>0)//如果大于1,证明有2或者2以上的因子,合数
        return 0;
    else
        return 1;
}
int main()
{
    int number;//接收要判断的数
    while(scanf("%d",&number)!=EOF)
    {
        if(number==0||number==1)
        {
            printf("Incorrect data!\n");
         continue;
        }
        int t=judge(number);
        if(t==1)
            printf("Prime number!\n");
        else
            printf("Composite number!\n");
    }
    return 0;
}

The process improvement: i ++, can be written ++ i. Judge, as long as there has been a 2 or more non itself can break up, in order to reduce traverse time.

Method two:
Code:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int judge(n)//传进来一个数,判断该数是不是素数
{
    if(n<=3)
        return 1;
    if(n%6!=1&&n%6!=5)//不在6两侧的数一定不是素数
        return 0;
    int m=(int)sqrt(n);
        for(int i=5;i<=m; i=i+6)
        {
            if (n%i==0||n%(i + 2)==0)
            return 0;
        }
        return 1;
}
int main()
{
	int number;
	while(scanf("%d",&number)!=EOF)
	{
		int t=judge(number);
		if(t==1)
			printf("Prime number!\n");
		else
			printf("Composite number\n");
	}
}

This method is more difficult to think, less than equal to the number three, the direct return is a prime (and is not considered negative 0,1) of the case, you can add an if statement to determine it. All primes must be 6X-1 or 6X + 1.6x is not a prime number, 6x + 2,6x + 3,6x + 4 is not a prime number. As long as 6x + 1 or 6x + 5 (6x-1) there may be a prime number.

Guess you like

Origin blog.csdn.net/weixin_44750790/article/details/91038133