怎么优化?过最后一个测试案例。
查看原帖
怎么优化?过最后一个测试案例。
723894
endgo楼主2022/5/14 11:18
#include<cmath>
#include<string.h>
using namespace std;

int a,b,Palindromes;
bool book[100000001];
//判断n是否为质数
int isPrime1(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0)
            return -1;
    }
    return 1;
}

//生成质数表 
void isPrime2(int n){
	memset(book,true,sizeof(book));
	book[0]=book[1]=false;
	int i,j;
	for(i=2;i<=sqrt(n);i++){
		if(book[i]){
			for(j=2;j<=n/i;j++){
				book[i*j]=false; //i*j<=b
			}
		}
	}
}

//判断回文数
int isPalindromes1(int m){
	int temp=m;//保存m
	int sum=0;
	while(temp>0){
		sum=sum*10+temp%10;
		temp/=10;
	}
	if(sum==m)
		return 1;
	else
		return 0; 
} 

//方法2 
int isPalindromes2(int m){
	int len=1;
	while(m/len>=10){
		len=len*10;
	} 
	while(m>0){
		int left=m/len;
		int right=m%10;
		if(left!=right)
			return -1;
		//减去首位,保留中间
		m=m%len/10;
		len=len/100; 
	}
	return 1;
}

int main(){
    cin>>a>>b;
    isPrime2(b);
    
    for(int i=a;i<=b;i++){
    	if(isPalindromes2(i)==1 && book[i]==true){
    		cout<<i<<endl;
		}
	}
    return 0;
}
2022/5/14 11:18
加载中...