dinner_spider @ 2022-11-05 23:35:17
#include <stdio.h>
#include <math.h>
int main()
{
int i, j;
int a, b, k=0, n=0, m, s;
int flag1, flag2;
scanf("%d%d", &a, &b);
for (i = a; i <= b;i++ )
{
flag2 = 1;
flag1 = 1;
s = 0;
m = i;
while (m != 0)
{
n = m % 10;
m = m / 10;
s = s * 10 + n;
}
if (i != s)
{
flag1 = 0;
flag2 = 0;
}
if(flag1)
{
k = sqrt(i);
for (j = 2; j <= k; j++)
{
if (i % j == 0)
{
flag2 = 0;
}
}
}
if (flag2 == 1)
{
printf("%d\n", i);
}
}
return 0;
}
by Ykmirror @ 2022-11-07 23:45:43
@dinner_spider
你这个的代码可以用埃氏筛法或者是欧拉筛法,遍历到
埃氏筛法时间复杂度
欧拉筛法也是最快的
贴代码(埃氏筛法):
int get_prime(ll n){
for(int i=0;i<=n;i++){
visit[i]=true;
}
for(int i=2;i*i<=n;i++){
if(visit[i]){
for(int j=i*i;j<=n;j+=i){
visit[j]=false;
}
}
}
for(int i=2;i<=n;i++){
if(visit[i]){
prime[cnt]=i;
cnt++;
}
}
}
封装起来是个函数,一些数组名和变量可以自己设置
我是打表过的,如果用了埃氏筛也过不去,那打表吧(
蒟蒻一枚,可能有遗漏,欢迎大佬指导
by dinner_spider @ 2022-11-09 18:30:11
@mky12345 谢谢大佬的指点,让我理解了对求质数的优化有几条更好的路径(鞠躬)