C求素数三种简易方法!!!

C语言函数求素数的办法

直接穷举法

这种方法的思路是n分别去整除从2到(n-1)的所有数来判断,若有余数为0,则不是素数,若所有数的余数不为0则是素数。
函数:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int Prime(int num){
    
    
		if (num <2){
    
        //2是最小的素数所以直接排除更小的
			return 0;
		}
		for (int i = 2; i <num; i++){
    
    
			if (num%i == 0){
    
    
				return 0;//能整除的就不是素数
			}
		}
		return 1;// 素数得到
	}
	

求100-200的素数:

	int main()
	{
    
    
		int num = 0;
		for (num = 100; num <= 200; num++){
    
    //输入100-200的素数
			if (Prime(num) == 1){
    
    //函数中return 1的都是素数
				printf("%d\n", num);	
				}
			}
		system("pause");
		return 0;
	}

求一个数是不是素数:

int main()
	{
    
    
		int num = 0;
		printf("输入一个数判断是否是素数:");
			scanf("%d", &num);
			int a=Prime(num);
			if (a == 1){
    
    
				printf("是素数");
			}
			else
				printf("不是素数");
		system("pause");
		return 0;
	}

斩半法

仅仅改了for循环的条件,这样就直接减小了一半的计算量。
因为2是最小的除数,所以一个数字的1/2以后是不可能还会被整除的。

注意此时多了一个“=”号,这样剔除了平方数。

int Prime(int num){
    
    
		if (num <2){
    
      
			return 0;
		}
		for (int i = 2; i <num; i++){
    
    
			if (num%i == 0){
    
    
				return 0;
			}
		}
		return 1;
	}

改成:

int Prime(int num){
    
    
		if (num <2){
    
       
			return 0;
		}
		for (int i = 2; i <=num/2; i++){
    
    
		//这里的for条件改变
			if (num%i == 0){
    
    
				return 0;
			}
		}
		return 1;
	}

调用平方根函数

也改了for循环的条件,这样就直接减更多的计算量。
因为一个数字的两个除数必要有一个小于或者等于其平方根的值。
注意此时多了一个“=”号,这样剔除了平方数。
在这里插入图片描述加上头文件:

#include<math.h>

int Prime(int num){
    
    
		if (num <2){
    
      
			return 0;
		}
		for (int i = 2; i <num; i++){
    
    
			if (num%i == 0){
    
    
				return 0;
			}
		}
		return 1;
	}

改成

int Prime(int num){
    
    
		if (num <2){
    
    
			return 0;
		}
		for (int i = 2; i <=sqrt(num*1.0); i++){
    
    
		//这里引用了平方根函数sqrt
			if (num%i == 0){
    
    
				return 0;
			}
		}
				return 1; 
	}

补充:
还有一个优化思路,除了2和3外没有两个素数是相邻的。所以可以i+=2。前提是奇数开始

猜你喜欢

转载自blog.csdn.net/zhaocx111222333/article/details/109379498