定义一个世纪的100个年号中不存在一个素数,即100个年号全为合数的世纪成为合数世纪;
试探究第n个合数世纪;
1.说明:
应用枚举搜索,设置a世纪的50个奇数年号(偶数年号无疑均为合数)为b,用k试商判别b是否为素数,用变量s统计这50个奇数中的合数的个数;
对于a世纪,若s=50,即50个奇数都为合数,找到a世纪为最早的合数世纪,打印输出后退出循环结束;
2.程序设计:
#include<stdio.h>
#include<math.h>
int main()
{
long a,b,k;
int m,n,s,x;
printf("探究第n个合数世纪,请输入n:");
scanf("%d",&n);
a=1;
m=0;
while(1)
{
a++; /*检验a世纪*/
s=0;
for(b=a*100-99;b<=a*100-1;b+=2) /*枚举a世纪奇数年号b*/
{
x=0;
for(k=3;k<=sqrt(b);k+=2)
if(b%k==0)
{
x=1;
break;
}
if(x==0) /*跳出循环进行下世纪的探求*/
break;
s=s+x; /*年号b为合数时,x=1,s增1*/
}
if(s==50) /*s=50,合数世纪数m增1*/
m++;
if(m==n)
break;
}
printf("第%d个合数世纪为%ld世纪!\n",n,a);
printf("该世纪的年号%ld--%ld全为合数!\n",a*100-99,a*100);
}
3.程序运行示例及其注意事项:
探究第n个合数世纪,请输入n:1
第1个合数世纪为16719世纪!
该世纪的年号1671801--1671900全为合数!
- 第1个合数世纪居然出现在百万多年之后,真可谓地老天荒,海枯石烂!那时的人类应该还存在,是否还沿用当今的公元世纪就不得而知了;
注意:应用前节程序可知[1671782,1671906]是125个连续合数区间,第1个合数世纪的100个合数年号1671801~1671900只是[1671782,1671906]的一个子区间;