您的位置:首页 > 其它

usaco1.5.2(pprime)

2012-07-23 10:45 316 查看
这个题目做完,就正式结束Chapter 1的内容进入2了,心情大爽,就是赶脚速度有点太慢了。

题目:

Prime Palindromes

The number 151 is a prime palindrome because it is both a prime number and a palindrome (it is the same number when read forward as backward). Write a program that finds all prime palindromes in the range of two supplied numbers a and b (5 <= a < b <= 100,000,000); both a and b are considered to be within the range .

PROGRAM NAME: pprime

INPUT FORMAT

Line 1:Two integers, a and b

SAMPLE INPUT (file pprime.in)

5 500

OUTPUT FORMAT

The list of palindromic primes in numerical order, one per line.

SAMPLE OUTPUT (file pprime.out)

5
7
11
101
131
151
181
191
313
353
373
383

提议就是说求A,B之间的回文素数
代码:


/*
ID:614433244
PROG: pprime
LANG: C++
*/

#include"iostream"
#include"cstdio"
#include"cmath"
using namespace std;
bool isp( int p )//еп╤о╩ьндйЩ
{
if( p==2 )
return true;
if( p==3 )
return true;
int i;
for( i=3;i<=sqrt( p )+1;i+=2 )
if( p%i==0 )
return false;
return true;
}
void solve( int a,int b )
{
int ans;
int i,j,k,l;
if( a<=3&&3<=b )
printf("3\n");
if( a<=5&&5<=b )
printf("5\n");
if( a<=7&&7<=b )
printf("7\n");
if( a<=2&&2<=b )
printf("2\n");
if( a<=11&&11<=b )
printf("11\n");
for( i=1;i<=9;i++ )//3位数
{
if( i==2||i==4||i==5||i==6||i==8 )
continue;
if( a>999||b<100 )
break;
for( j=0;j<=9;j++ )
{
ans=101*i+j*10;
if( isp(ans)&&ans<=b&&ans>=a )
printf("%d\n",ans);
if( ans>=b )
return;
}
}
for( i=1;i<=9;i++ )//5位数
{
if( i==2||i==4||i==5||i==6||i==8 )
continue;
if( a>99999||b<10000 )
break;
for( j=0;j<=9;j++ )
for( k=0;k<=9;k++ )
{
ans=10001*i+1010*j+100*k;
if( isp(ans)&&ans<=b&&ans>=a )
printf("%d\n",ans);
if( ans>=b )
return;
}
}
for( i=1;i<=9;i++ )//7
{
if( i==2||i==4||i==5||i==6||i==8 )
continue;
if( a>9999999||b<1000000 )
break;
for( j=0;j<=9;j++ )
for( k=0;k<=9;k++ )
for( l=0;l<=9;l++ )
{
ans=1000001*i+100010*j+10100*k+1000*l;
if( isp(ans)&&ans<=b&&ans>=a )
printf("%d\n",ans);
if( ans>=b )
return;
}
}
}
int main()
{
freopen("pprime.in","r",stdin);
freopen("pprime.out","w",stdout);
int a,b;
scanf("%d%d",&a,&b);
solve(a,b);
return 0;
}


这道题目让我赶脚到了把代码写在main外面的好处那就是可以在必要时直接return,这样可以少做不少的比较!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: