题意:给你一个区间,问其中是否存在素数变化位数后仍为素数 例:19937, 99371, 93719, 37199, 71993 问区间中有几个
PS:Time_Limit_Exceeded中!可能是Circle函数超时 目前还不知道哪的问题
思路:打印素数表,循环判断即可……
( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)(你自己都还是错的发上来搞毛
( ̄ε(# ̄)(我也想对啊,求一条明路QAQ
TLE代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 #define MAXN 1000001 8 #define ll 9 //#define onlineJudge 10 int cnt,counts; 11 long l,r; 12 bool isprime[MAXN]; 13 long prime[MAXN]; 14 15 bool datecin() 16 { 17 counts=0; 18 scanf("%ld",&l); 19 if(l==-1) 20 return false; 21 scanf("%ld",&r); 22 return true; 23 } 24 25 void getprime() 26 { 27 int i,j; 28 memset(isprime,1,sizeof(isprime)); 29 isprime[0]=isprime[1]=cnt=0; 30 for(i=2;i*i<MAXN;i++) 31 { 32 if(isprime[i]) 33 { 34 for(j=i*i;j<MAXN;j+=i) 35 { 36 if(isprime[j]) 37 { 38 isprime[j]=false; 39 } 40 } 41 42 } 43 } 44 for(i=2;i<MAXN;i++) 45 { 46 if(isprime[i]) 47 prime[cnt++]=i; 48 } 49 } 50 51 int getw(long num) 52 { 53 int i=0; 54 while(num!=0) 55 { 56 num/=10; 57 i++; 58 } 59 return i; 60 } 61 62 bool circle(long num) 63 { 64 int w=getw(num); 65 int g=1; 66 for(int i=1;i<w;i++)g*=10; 67 for(int i=1;i<w;i++) 68 { 69 num=num/10+(num%10)*g; 70 //cout<<num<<endl; 71 if(!isprime[num]) 72 return false; 73 } 74 return true;; 75 } 76 77 void datecal() 78 { 79 for(int i=0;i<cnt;i++) 80 { 81 if(prime[i]>r) 82 break; 83 if(prime[i]>=l&&prime[i]<=r) 84 { 85 if(circle(prime[i])) 86 counts++; 87 } 88 } 89 } 90 91 void showres() 92 { 93 if(counts==0) 94 printf("No Circular Primes.\n"); 95 else if(counts==1) 96 printf("1 Circular Prime.\n"); 97 else if(counts>1) 98 printf("%d Circular Primes.\n",counts); 99 } 100 101 102 int main() 103 { 104 105 getprime(); 106 #ifdef ll 107 while(datecin()) 108 { 109 datecal(); 110 #ifdef onlineJudge 111 freopen("d:\\uva_967.txt", "w", stdout); 112 #endif // onlineJudge 113 showres(); 114 115 } 116 #endif // ll 117 return 0; 118 }
=s= 嗯,目前状态TLE,先搁这了,我做做其他的( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)(你的学习之魂呢
时间: 2024-10-13 19:24:09