求前n个合数世纪

首先声明下,这个学习了这位的文章;
(作者:double_main 原文:https://blog.****.net/double_main/article/details/53871267 )
我的任务是输入n,然后输出前n个合数世纪,而他的代码实现了输入n求出第n个合数世纪。
我比较菜,即使有大佬的代码,我从分析他的代码再到实现我的功能还是花费了一些时间。
先上结果图
求前n个合数世纪
既然是求合数世纪,那么就先从合数说起。
合数:在大于1的整数中,除了1和这个数本身,还能被其他正整数整除的数,如4,6,9,15,21。
那么在求合数时,我们可以发现4之前无合数,所有大于2的偶数都是合数.
合数世纪:一个世纪的100个年中不存在一个素数,即100个年号全为合数的世纪称为合数世纪;
在没有啥好的方法时,枚举是思路比较简单的。
提到合数就会遇到素数,我们可以检查该世纪100年中是否有素数?若有,则不是合数世纪。否则,进行下一步检验。
首先要遍历具体的某个世纪,一个世纪一百年,(公元0年显然不符合条件)第一年为1年,
for(b=a100-99;b<=a100-1;b+=2)
贴一段大佬的原文,或许会更容易理解(应用枚举搜索,设置a世纪的50个奇数年号(偶数年号无疑均为合数)为b,用k试商判别b是否为素数,用变量s统计这50个奇数中的合数的个数;对于a世纪,若s=50,即50个奇数都为合数,找到a世纪为最早的合数世纪,打印输出后退出循环结束;)
—————————————————————————————————————————————————————————————
判断素数,他采用了试除法。
(初级)试除法:
要判断x是否为质数,从2开始不断尝小于x且大于1的自然数(从2试到x-1),只要有一个能整出,则x是合数;否则,x是质数。
接着考虑到,如果x有(除了自身之外)质因数,那么肯定小于x/2。
进一步分析,除了2以外,所有可能的质因数都是奇数。所以,先从2开始,再从2开始一直到x/2的所有奇数。
接着分析,发现只要从3一直尝试到sqrt(x)就可以。简单解释 为,因数都是成对出现的。比如12的因数有1和12,2和6,3和4。发现因数是成对出现的,其中一个必然小于或等于12的开平方,另一个大于或等于12的开平方(根号12约为3.464)。
{假设n从2到根号n都没有它的因数a,
而他有一个因数是m并且是大于根号n很显然有:n/m = n(一个整数),
由于m>根号n,n<根号n这说明n从2到根号n有它的因数,与假设相反}
{再插播一句,关于求素数还有埃拉托斯特尼筛选法,这个不太好理解,不过效率还是挺高的;如果黎曼猜想搞定,求素数会更方便}

代码如下:
求前n个合数世纪
—————————————————————————————————————————————————————————————
(我水平比较差,若有错误,还请多多指正)