用比x小的素数能测试x是不是素数

参考: 

为什么比x小的素数能测试x是不是素数? - 知乎一个不是素数的数也就是合数,它可以是两个数的乘积,这两个数可以有很多种组合,但一定会有一种组合里的…icon-default.png?t=N7T8https://www.zhihu.com/question/377324304/answer/1251090453

示例代码: 

/*
为什么比x小的素数能测试x是不是素数?
一个不是素数的数也就是合数,它可以是两个数的乘积,这两个数可以有很多种组合,但一定会有一种组合里的这两个数其中的一个数是素数。
那么为什么呢?因为如果把他们的两个数的组合再继续拆(如果可以的话),最后就会变成至少两个以上的不可再分的小乘积,这些乘积都是素数了,
随便取其中一个,再把其他小乘积乘其来成一个数,这两个数构成一个组合,那么就上面的结论就得证了。这样文字表述可能不够直观,直接举例拿组合比较多的24来说好了。
24组合随便举一个乘积组合4*6,4和6各自都是合数,它们再各自拆可以拆成2*2*2*3那么可以先取一个2,其他乘积为12也可以取一个3,其他乘积为8。
所以一个数是合数,那么除以这个合数之前的素数一定会有整除的,不能整除就是素数。
外加一句你是在看翁恺c语言吗的吗,它里面的却没讲为什么

作者:匿名用户
链接:https://www.zhihu.com/question/377324304/answer/1251090453
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/
#include <stdio.h> 
int isPrime(int x,int knownPrimes[],int numberofKnownPrimes);    //函数的声明 
int main() 
{
	const int number = 100;       //定义常量 
	int prime[100]={2};   	//先声明,c语言是不允许定义数组并且初始化时用变量代表其大小,但是c++可以,在.cpp文件中可以写成prime[number //表面prime数组有100大小 ,先填入第一个素数2,其余的先初始化为0;(若给出数组大小,不写则初始化为0) 
	int count = 1;  			//这里数组已经有一个素数了,所以计数为1  
	int i = 3;       			//从3开始判断 
	while (count < number){    //用循环,只要计数count还小于所定的数组大小,就继续循环 
		if (isPrime(i,prime,count)){    //这里是进入函数,然后函数返回值,如果返回1,则运行下面语句,让数组下标为1的位置填上该i,然后指向下一个下标2的位置,等2位置填上素数后 
			prime[count++] = i;			//再指向下一个下标3的位置...    (关于为什么是prime[count++] = i的解释; 
		}
		i++;   					//然后累加,看4是不是素数 
	}
	for (i=0;i<number;i++){    
		printf("%d",prime[i]);
		if ( (i+1)%5) printf("\t");       //这里没什么好说的,就是把数组输出,每个数之间个一段距离,每5个数就换一行 
		else printf("\n");
	}
	return 0;
}
int isPrime(int x,int knownPrimes[],int numberofKnownPrimes)
{
	int ret = 1;                    //这是结果,先假定为素数 
	int i;
	for (i=0;i<numberofKnownPrimes;i++){        //这里的意思是循环,目前数组里面有几个素数,就循环几次,比如第一次进入,就1个素数,所以循环1次 
		if (x % knownPrimes[i]==0){       //如果在数组的素数表里找到能整除的素数,则表示x不是素数 
			ret = 0;
			break;   
		}
	}
	return ret;       
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值