【题目链接】
【题目考点】
-
基础数论(质数、因数);
-
循环结构(嵌套);
-
枚举法;
【解题逻辑】
解法1:
-
枚举整数范围 [A, B] 内的每一个整数 i;
-
枚举每个数字i的因数范围(1~i),统计i的因数个数;
-
根据因数个数判断是否为质数:
质数:只有1和本身两个因数;
- 统计质数个数;
解法2:
-
枚举整数范围 [A, B] 内的每一个整数 i;
-
对每个整数i,使用标记法初始化"是质数"的标记;
-
验证 i 是否符合质数定义:
枚举 2 ~ i-1 之间的所有整数 j,验证 j 是否为 i 的因数;若存在因数,将标记为非质数;
- 根据标记统计质数个数;
【题解代码】
解法1:
- 输入两个整数A,B;
cpp
int A,B;
cin>>A>>B;
- 统计范围内的素数个数;
cpp
int cnt=0;
- 枚举A~B之间所有的数字;
cpp
for(int i=A;i<=B;i++){
// 判断i是否为质数
// 标记法: 假设是质数(2~i之间没有因数)
int f=1;
for(int j=2;j<i;j++){
if(i%j==0){// 如果出现因数
f=0;//标记为不是质数
}
}
// 根据标记判定i是否为质数
// 如果f为1,则统计质数个数
if(f) cnt++;
}
- 输出范围内质数个数;
cpp
cout<<cnt;
解法2:
- 输入两个整数A,B;
cpp
int A,B;
cin>>A>>B;
- 统计范围内的素数个数;
cpp
int cnt=0;
- 枚举A~B之间所有的数字;
cpp
for(int i=A;i<=B;i++){
// 统计i的因数个数
int p=0;
for(int j=1;j<=i;j++){
if(i%j==0){// 能被j整除,是j的因数
p++;
}
}
if(p==2){// i是质数
cnt++;
}
}
- 输出范围内质数个数;
cpp
cout<<cnt;