FliMz @ 2022-11-27 12:19:35
#include<bits/stdc++.h>
using namespace std;
bool jz(int);
bool jh(int);
int main()
{
int l,r;
cin>>l>>r;
for(int i=l;i<=r;i++)
{
if(jz(i)==true)
if(jh(i)==true)
cout<<i<<endl;
}
return 0;
}
bool jz(int x)
{
int s=0;
if(x>3)
for(int i=2;i<=sqrt(x);i=i+1)
if(x%i==0)
s=s+1;
if(x==1)
s=s+1;
if(s==0)
return true;
else
return false;
}
bool jh(int y)
{
int n1=y,n2=0;
for(n1=y,n2=0;n1!=0;n1/=10)
n2=n2*10+n1%10;
if(n2==y)
return true;
else
return false;
}
有没有一种更加迅速的速度优化方案
by hedabo_2445 @ 2022-11-27 15:40:51
你的代码有点复杂,可能过于暴力,可能会t
#include<iostream>
using namespace std;
bool r(int n){//质数
if(n==1) return false;
else{
int i;
for(i=2;i*i<=n;i++)
if(n%i==0) return false;
return true;
}
}
bool b(int n){//回文数
int sum=0;
int k=n;
while(n!=0){
sum=sum*10+n%10;
n/=10;
//倒着加来判断回文
}
if(sum==k) return true;
else return false;
}
int main() {
int n,sum=0,m;
cin>>n>>m;
for(int i=n;i<=m;i++){
if(i==9989900) break;//注意特判,否则会挂
if(b(i)&&r(i))cout<<i<<endl;
}
return 0;
}
by hedabo_2445 @ 2022-11-27 15:41:27
@FliMz
by DZren @ 2022-12-09 06:03:22
@Hedabo_2509 为什么你的代码能过我的这个看起来没什么区别但是过不了呢 而且 换成你写的回文数判断也不行
#include <iostream>
#define fast() \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
using namespace std;
int a, b;
bool isPrime(int n)
{
if (n < 2)
return false;
else
{
int i;
for (i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
}
string s;
int sLen;
bool isLoop(int n)
{
s = to_string(n);
sLen = s.length();
for (int i = 0; i < sLen / 2; i++)
{
if (s[i] != s[sLen - 1 - i])
{
return false;
}
}
return true;
}
// bool isLoop(int n)
// { // 回文数
// int sum = 0;
// int k = n;
// while (n != 0)
// {
// sum = sum * 10 + n % 10;
// n /= 10;
// // 倒着加来判断回文
// }
// if (sum == k)
// return true;
// else
// return false;
// }
void miniJianZhi(int &i)
{
if (i % 2 == 1)
{
i += 2;
}
else
{
i++;
}
}
int main()
{
// fast();
// cin >> a >> b;
scanf("%d%d", &a, &b);
int cnt = 0;
for (int i = a; i <= b; )
{
if (i == 9989900)
break;
if (isPrime(i) && isLoop(i))
{
// cout << i << '\n';
printf("%d\n", i);
}
miniJianZhi(i);
}
return 0;
}
by Lucas2024 @ 2023-01-25 16:48:20
试试这样:
#include<iostream>
#include<cmath>
using namespace std;
int m,n,pal[100000005],pos=4;
bool isprime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++)
{
if(x%i==0)
{
return false;
break;
}
}
return true;
}
int main()
{
int a,b,c,d,e,i;
cin>>m>>n;
//构造回文数
pal[1]=5;pal[2]=7;pal[3]=11;
for(a=1;a<=9;a+=2)/*只有奇数是素数*/
{
for(b=0;b<=9;b++)
{
pal[pos++]=101*a+10*b;
}
}
for(a=1;a<=9;a+=2)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
pal[pos++]=10001*a+1010*b+100*c;
}
}
}
for(a=1;a<=9;a+=2)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
for(d=0;d<=9;d++)
{
pal[pos++]=1000001*a+100010*b+10100*c+1000*d;
}
}
}
}
for(a=1;a<=9;a+=2)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
for(d=0;d<=9;d++)
{
for(e=0;e<=9;e++)
{
pal[pos++]=100000001*a+10000010*b+1000100*c+101000*d+10000*e;
}
}
}
}
}
for(i=1;pal[i]<=n;i++)
{
if(pal[i]>=m&&isprime(pal[i]))
{
cout<<pal[i]<<endl;
}
}
return 0;
}
我用回文判断就不行,试试构造回文数以后判素