TLE状态-UVA, 967 Circular

题意:给你一个区间,问其中是否存在素数变化位数后仍为素数 例: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

TLE状态-UVA, 967 Circular的相关文章

UVa 1584 Circular Sequence --- 水题

UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较二者字典序大小的函数, 然后再用一层循环,进行n次比较,保存最小的字典序的串的首字母位置,再利用模运算输出即可 /* UVa 1584 Circular Sequence --- 水题 */ #include <cstdio> #include <cstring> //字符串s为环状,

uva 11024 - Circular Lock(数学)

题目链接:uva 11024 - Circular Lock 题目大意:有个2*2的矩阵,给定p,s,P为p数组中所有元素的最大公约数.s为2*2矩阵的初始状态,每次可以选择一行或是一列同时加1,最终使得sij%P=0 解题思路:gij为aij还需要多少可以是P的倍数,判断g11?g12?g21+g22是P的倍数即可. /******************** * A + C = a + k1 * p * B + C = b + k2 * p * A + D = c + k3 * p * B

UVA 11024 - Circular Lock(数论+推理)

UVA 11024 - Circular Lock 题目链接 题意:给定一个矩阵,每次能在一行或者一列都加1,问能否构造出满足每个位置%P都等于0的矩阵,P的得到方法为矩阵p所有数字的gcd 思路:推公式啊,一共4个加值的方法,分别为A,B,C,D A + C 加到A位置上a + k1 p,a为原位置差多少为p的倍数 同理 A + D 加到A位置上b + k2 p B + C 加到A位置上c + k3 p B + D 加到A位置上d + k4 p 这样一来消掉就得到a - b - c + d +

uva 1584 Circular Sequence (字符串处理)

C - Circular Sequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description Some DNA sequences exist in circular forms as in the following figure, which shows a circular sequence ``CGAGTCAGCT", that is,

UVA 1584 - Circular Sequence(环状序列)(字典序)

1584 - Circular Sequence Time limit: 3.000 seconds Some DNA sequences exist in circular forms as in the following figure, which shows a circular sequence ``CGAGTCAGCT", that is, the last symbol ``T" in ``CGAGTCAGCT" is connected to the firs

UVa 1584 Circular Sequence(环形串最小字典序)

题意  给你一个环形串   输出它以某一位为起点顺时针得到串的最小字典序 直接模拟   每次后移一位比较字典序即可  注意不能用strcpy(s+1,s)这样后移  strcpy复制地址不能有重叠部分 #include<cstdio> #include<cstring> using namespace std; const int N = 150; char s[N], ans[N], c; int t, l; int main() { scanf ("%d",

UVa 1548 Circular Sequence (字符串处理)

Circular Sequence Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description Some DNA sequences exist in circular forms as in the following figure, which shows a circular sequence ``CGAGTCAGCT", that is, t

UVa 1584 - Circular Sequence

哈哈哈哈,  又用Java强大的字符串API和集合类水过一道题,不服用C++来一遍看看比这个代码长多少(不考虑时间的情况下). import java.util.*; public class Main1584 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ArrayList<String> arrlist = new ArrayList<String>(); St

UVa -1584 Circular Sequence 解题报告

1.题目大意 输入长度为n$(2\le n\le 100)$的环状DNA串,找出该DNA串字典序最小的最小表示. 2.思路 这题特别简单,一一对比不同位置开始的字符串的字典序,更新result. 3.代码 #include"stdio.h" #include"string.h" #define maxn 100 int judge(char* s,int p,int q) //比较p的字典序是否比q小 { int m=strlen(s); for(int i=0;