• HDU 1431 素数回文


    有人问我这个问题。

    个人感觉暴搜会TLE O(n*sqrt(n))。n=100000000;(推断素数用2~sqrt(n)+1 去除)


    还是枚举好了。

    枚举 1~10000,把他每一位存下来,回文数已知 left 。求 right ,然后组合起来。


    比如 1 ,推断 11 是否素数。


    比如 10 。推断 101 是否素数, 推断 1001 是否素数。


    这样复杂度就是 O(n^2)。

    開始我 bool pa[100000000] 准备用标记来确定。

    结果MLE。


    然后算了一下 总共同拥有多少个数,最多 781 个。 int pa[1000] 就能够装下了。

    G++ 15ms


    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<map>
    #include<stack>
    #include<iostream>
    #include<list>
    #include<set>
    #include<vector>
    #include<cmath>
    
    #define INF 0x7fffffff
    #define eps 1e-8
    #define LL long long
    #define PI 3.141592654
    #define CLR(a,b) memset(a,b,sizeof(a))
    #define FOR(i,a,b) for(int i=a;i<b;i++)
    #define FOR0(i,a,b) for(int i=a;i>=b;i--)
    #define pb push_back
    #define mp make_pair
    #define ft first
    #define sd second
    #define sf scanf
    #define pf printf
    #define sz(v) ((int)(v).size())
    #define all(v) (v).begin(),(v).end()
    #define acfun std::ios::sync_with_stdio(false)
    
    #define SIZE 100000000 +1
    using namespace std;
    
    int pa[1000];
    int cot;
    bool prime(int n)
    {
        FOR(i,2,sqrt(n)+2)
            if(n%i==0)return 0;
        return 1;
    }
    
    void PA()
    {
        cot=0;
        pa[cot++]=2;
        pa[cot++]=3;
        pa[cot++]=5;
        pa[cot++]=7;
        FOR(i,1,10000)
        {
            int num[5];
            int len=0;
            int m=i;
            while(m)
            {
                int tmp=m%10;
                num[len++]=tmp;
                m/=10;
            }
            int ans=i;
            if(len>1)
            {
                FOR(r,1,len)
                    ans=ans*10+num[r];
                if(prime(ans))
                    pa[cot++]=ans;
            }
            ans=i;
            FOR(r,0,len)
                ans=ans*10+num[r];
            if(prime(ans))
                pa[cot++]=ans;
        }
    }
    
    int main()
    {
        PA();
        int a,b;
        while(~sf("%d%d",&a,&b))
        {
            FOR(i,0,cot)
            if(pa[i]>=a&&pa[i]<=b)pf("%d
    ",pa[i]);
            pf("
    ");
        }
    }
    




  • 相关阅读:
    图片懒加载原生写法。
    ES6新声明
    下拉刷新上拉加载
    angular动画
    angular路由切换后 轮播以及iscrollJs失效的问题
    ui-route多级嵌套时的默认显示。
    iscroll.js的基本布局
    angular ng-route和ui-route
    require.js JQ
    Cookie&Session
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7365328.html
Copyright © 2020-2023  润新知