#include<bits/stdc++.h> using namespace std; bool p(int i){ for(int d=2;d*d<=i;d++){ if(i%d==0){ return 0; } } return 1; } bool x(int i,int d){ while(i!=0){ if(i%10==d){ return 1; } } return 0; } int main(){ int a,b,d,cnt=0; cin>>a>>b>>d; for(int i=a;i<=b;i++){ if(p(i)){ if(x(i,d)){ cnt++; } } } cout<<cnt; return 0; }
理解问题#include<bits/stdc++.h> using namespace std; bool p(int i){ for(int d=2;d*d<=i;d++){ if(i%d==0){ return 0; } } return 1; } bool x(int i,int d){ while(i!=0){ if(i%10==d){ return 1; } } return 0; } int main(){ int a,b,d,cnt=0; cin>>a>>b>>d; for(int i=a;i<=b;i++){ if(p(i)){ if(x(i,d)){ cnt++; } } } cout<<cnt; return 0; }
已完成理解「#include<bits/stdc++.h> using namespace std; bool p(int i){ for(int d=2;d*d<=i;d++){ if(i%d==0){ return 0; } } return 1; } bool x(int i,int d){ while(i!=0){ if(i%10==d){ return 1; } } return 0; } int main(){ int a,b,d,cnt=0; cin>>a>>b>>d; for(int i=a;i<=b;i++){ if(p(i)){ if(x(i,d)){ cnt++; } } } cout<<cnt; return 0; }」
展开阅读网页
这段代码的主要功能是计算在给定区间[a, b]内,既是素数又包含特定数字d的数的数量。12
🔍 代码功能解析
- 素数判断函数:
bool p(int i)
用于判断一个数是否为素数。它通过检查从2到√i之间的所有整数,判断是否存在能整除i的数。如果没有,则i是素数。3 - 数字包含判断函数:
bool x(int i, int d)
用于判断一个数i是否包含数字d。它通过不断取i的最后一位数字,检查是否等于d。1 - 主函数:
int main()
读取输入的a、b和d,然后遍历区间[a, b]内的每一个数,使用上述两个函数判断是否符合条件,并统计符合条件的数的数量。1
🧩 代码优化建议
- 素数判断优化:当前的素数判断函数
p(int i)
可以进一步优化。例如,可以利用6k±1规则,减少不必要的循环次数。3 - 数字包含判断优化:
x(int i, int d)
函数在每次调用时都会从头开始检查,可以考虑优化为只检查一次。1 - 输入输出优化:在处理大量数据时,使用
scanf
和printf
代替cin
和cout
可以提高输入输出效率。5
🛠 具体改进方案
-
素数判断优化:
bool p(int i) { if (i <= 1) return false; if (i <= 3) return true; if (i % 2 == 0 || i % 3 == 0) return false; for (int d = 5; d * d <= i; d += 6) { if (i % d == 0 || i % (d + 2) == 0) return false; } return true; }
-
数字包含判断优化:
bool x(int i, int d) { while (i > 0) { if (i % 10 == d) return true; i /= 10; } return false; }
-
输入输出优化:
int main() { int a, b, d, cnt = 0; scanf("%d %d %d", &a, &b, &d); for (int i = a; i <= b; i++) { if (p(i) && x(i, d)) { cnt++; } } printf("%d", cnt); return 0; }