break-word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">【案例描述】
break-word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">编程实现:输入整数m、n,输出[m,n]上的质数个数。
输入:1,100
输出:25
【案例分析】
1、只有一个真因子的正整数称为质数。
2、一个正整数k为质数的充要条件是:k在[2,t]上无约数。其中t是k的算术平方根的整数部分。
这是因为,如果k有约数x,则y=k/x也是k的约数,且x*y=k
设x<=y,则x*x<=k
即:如果k存在约数,则k一定存在约数x满足:x*x<=k。反之,如果没有满足条件x>1且x*x<=k的x,则k是质数。
(1)k=m。s=0(统计[m,n]上的质数个数)
(2)如果k>n,则转步骤(5)
(3)判断k是否为质数:
A、t=2
B、如果t*t>k,则转步骤(E)
C、如果k能被t整除,则转步骤(E)
D、t++,转步骤B
E、如果t*t>k且k>1,则k是质数,s++。转步骤(4)
(4)k++。转步骤(2)
(5)输出s
【参考代码】
main()
{ int m,n,k,s=0,t;
scanf("%d,%d",&m,&n);
for(k=m;k<=n;k++)
{ for(t=2;t*t<=k;t++)
if(k%t==0)break;
if(t*t>k&&k>1)s++;}
printf("%d",s);}