哈喽,进来的童鞋你们好哇!俺今天想给大家分享编程里面素数判断的的技巧,这也是我实践过后的心得。
首先咱都知道,判断一个数是否是素数,就是看除了1和他自身之外还有没有其他数能整除它。
举个栗子,7就是一个素数,在1 2 3 4 5 6 7范围内,除了1 和 7之外2 3 4 5 6都不能整除7。
知道这个,咱以后判断一个数 num 是否是素数的基础方法就是利用一个循环变量从2~n-1来整除 num,能整除那就不是素数反之就是素数。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
int num = 0;
int flag = 1;//flag值为1代表是素数
scanf("%d", &num);
for (i = 2; i <= num - 1; i++ )
{
if (num % i == 0)
{
flag = 0;//值为零则不是素数
break;
}
}
if (flag == 1)
printf("该数是素数!\n");
else
printf("该数不是素数!\n");
return 0;
}
以上是C语言版的判断素数的一个函数。
相信对大部分童鞋来说,上面的方法大家都懂的,所以我下面分享两条我学到的优化判断的条件,这样程序的运行效率会更高!
1.既然素数不能被2整除,那么所有的偶数都不是素数咯
2.如果一个数n 能表示成 n = a * b (除了1*n),那么我们就可以知道 a,b两个数必定是一大一小或者两个相等对吧。而且较小的那个数一定是小于或者等于的(这个你肯定不信,你去实践就知道了),这样一来我们判断素数又可以更简单了,只需从2判断到
的位置即可,若在这之间能找到那个因数,那么该数就不是素数,找不到那就是素数。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int sunumber(int num);
int main()
{
int i = 0;
for (i = 101; i <= 200; i += 2)
{
if (sunumber(i))
{
printf("%d ", i);
}
}
return 0;
}
int sunumber(int num)
{
int i = 0;
for (i = 2; i <= sqrt(num); i++)
{
if (num % i == 0)
return 0;
}
return 1;
}
以上是一个优化过后的找100~200之间素数的代码例子,各位童鞋大可去试这个方法,有问题可发评论,咱可以一起讨论。若你能受益还请你给俺点个赞哈。
OK今天就分享这些。