求助,56分,不超时
查看原帖
求助,56分,不超时
494183
mashduihca楼主2021/7/11 06:08
#include <iostream>
#include<cmath>

using namespace std;


bool isprime(int a)//判断质数
{
	for(int i=3;i<=sqrt(a);i+=2)//因为开头结尾一定不是2的倍数所以直接+=2
	{
		if(a%i==0)
		return false;
	} 
	return true;
} 
int main()
{
	int a,b;
	cin >> a >> b;
	if(a==5&&b<7)
	{
		cout << 5;
		return 0; 
	}
	if(a<=7)
	cout << 5 << endl << 7 << endl;
	if(b<11)
	return 0;
	if(a<=11)
	cout << 11 << endl;
	for(int i=1;i<=9;i+=2)
	{
		for(int j=0;j!=10;++j)
		{
			int re = i*100+j*10+i;//取回文数
			if(b<re) return 0;if(a>re)break;//判断范围
			if(isprime(re)==true)
			cout << re << endl;
		}
	}
	for(int i=1;i<=9;i+=2)
	{
		for(int j=0;j!=10;++j)
		{
			int re = i*1000+j*100+j*10+i;
			if(b<re) return 0;if(a>re)break;
			if(isprime(re)==true)
			cout << re << endl; 
		}
	}
	for(int i=1;i<=9;i+=2)
	{
		for(int j=0;j!=10;++j)
		{
			for(int k=0;k!=10;++k)
			{
				int re = i*10000+j*1000+k*100+j*10+i;
				if(b<re) return 0;if(a>re)break;
				if(isprime(re)==true)
				cout << re << endl;
			}
		}
	}
	for(int i=1;i<=9;i+=2)
	{
		for(int j=0;j!=10;++j)
		{
			for(int k=0;k!=10;++k)
			{
				int re = i*100000+j*10000+k*1000+k*100+j*10+i;
				if(b<re) return 0;if(a>re)break;
				if(isprime(re)==true)
				cout << re << endl;
			}
		}
	}
	for(int i=1;i<=9;i+=2)
	{
		for(int j=0;j!=10;++j)
		{
			for(int k=0;k!=10;++k)
			{
				for(int m=0;m!=10;++m)
				{
					int re = i*1000000+j*100000+k*10000+m*1000+k*100+j*10+i;
					if(b<re) return 0;if(a>re)break;
					if(isprime(re)==true)
					cout << re << endl;
				}
			}
		}
	}
	for(int i=1;i<=9;i+=2)
	{
		for(int j=0;j!=10;++j)
		{
			for(int k=0;k!=10;++k)
			{
				for(int m=0;m!=10;++m)
				{
					int re = i*10000000+j*1000000+k*100000+m*10000+m*1000+k*100+j*10+i;
					if(b<re) return 0;if(a>re)break;
					if(isprime(re)==true)
					cout << re << endl;
				}
			}
		}
	}
	for(int i=1;i<=9;i+=2)
	{
		for(int j=0;j!=10;++j)
		{
			for(int k=0;k!=10;++k)
			{
				for(int m=0;m!=10;++m)
				{
					for(int n=0;n!=10;++n)
					{
						int re = i*100000000+j*10000000+k*1000000+m*100000+n*10000+m*1000+k*100+j*10+i;
						if(b<re) return 0;if(a>re)break;
						if(isprime(re)==true)
						cout << re << endl;
					}
				}
			}
		}
	}
	return 0;
}

最后一个点都过了,第二个点显示On line 1 column 1, read 9, expected 7.

附第二个点的输出:

757 787 797 919 929 10301 10501 10601 11311 11411 12421 12721 12821 13331 13831 13931

2021/7/11 06:08
加载中...