• USACO Prime Palindromes 构造回文数


    这道题目一点也不卡素数的判断

    就是朴素的sqrt(n) 也不卡

    所以~放心的用吧。

    构造回文的时候看了HINT

    其中是这么写的:

    Generate palindromes by combining digits properly. You might need more than one of the loops like below.
    
    /* generate five digit palindrome: */
    for (d1 = 1; d1 <= 9; d1+=2) {	/* only odd; evens aren't so prime */
        for (d2 = 0; d2 <= 9; d2++) {
            for (d3 = 0; d3 <= 9; d3++) {
    	    palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;
    	    ... deal with palindrome ...
    	}
        }
    }
    

     

    Source Code:

    /*
    ID: wushuai2
    PROG: pprime
    LANG: C++
    */
    //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    #include <cstring>
    #include <cmath>
    #include <stack>
    #include <string>
    #include <map>
    #include <set>
    #include <list>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #define Max(a,b) (((a) > (b)) ? (a) : (b))
    #define Min(a,b) (((a) < (b)) ? (a) : (b))
    #define Abs(x) (((x) > 0) ? (x) : (-(x)))
    #define MOD 1000000007
    #define pi acos(-1.0)
    
    using namespace std;
    
    typedef long long           ll      ;
    typedef unsigned long long  ull     ;
    typedef unsigned int        uint    ;
    typedef unsigned char       uchar   ;
    
    template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}
    template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;}
    
    const double eps = 1e-7      ;
    const int M = 660000         ;
    const ll P = 10000000097ll   ;
    const int INF = 0x3f3f3f3f   ;
    const int MAX_N = 20         ;
    const int MAXSIZE = 101000000;
    
    bool primei(int n){
        int i, j;
        for(i = 2; i <= sqrt(n); ++i){
            if(n % i == 0)  return false;
        }
        return true;
    }
    
    ll b[10000]={5,7,11};
    int p[8]={4,2,4,2,4,6,2,6};
    bool prime(int n){
        int i = 7, j, q;
        if(n == 1)  return false;
        if(n == 2 || n == 5 || n == 3)  return true;
        if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0)  return false;
        q = (int)sqrt((double)n);
        for(; i <= q; ){
            for(j = 0; j < 8; ++j){
                if(n % i == 0)  return false;
                i += p[j];
            }
            if(n % i == 0)  return false;
        }
        return true;
    }
    int creat(){
        int i, j, k, l, m, count = 3;
        for(i = 1; i <= 9; i += 2)
            for(j = 0; j <= 9; ++j)
                b[count++] = 100 * i + 10 * j + i;
        for(i = 1; i <= 9; i += 2)
            for(j = 0; j <= 9; ++j)
                for(k = 0; k <= 9; ++k)
                  b[count++] = 10000 * i + 1000 * j + k * 100 + j * 10 + i;
            for(i = 1; i <= 9; i += 2)
             for(j = 0; j <= 9; ++j)
                for(k = 0; k <= 9; ++k)
                    for(l = 0; l <= 9; ++l)
                      b[count++] = 1000000 * i + 100000 * j + k * 10000 + l * 1000 + k * 100 + j * 10 + i;
            return count - 1;
    }
    
    int main() {
        ofstream fout ("pprime.out");
        ifstream fin ("pprime.in");
        int i, j, k, t, n, s, c, w, q;
        int a;
        n = creat();
        fin >> a >> c;
        for(i = 0; i < n; ++i){
            if(b[i] >= a){
                if(b[i] > c) break;
                if(prime(b[i])){
                    fout << b[i] << endl;
                }
            }
        }
    
        fin.close();
        fout.close();
        return 0;
    }
  • 相关阅读:
    c/c++中两颗璀璨的明珠
    deepin软件中心打不开
    shell之rm -rf的别名设置
    历史命令脚本
    mysql之7xtrabackup
    python之3内置容器
    python之第一个例子hello world
    python之安装
    shell脚本练习(autocert)
    【转】nginx之逻辑运算
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4264229.html
Copyright © 2020-2023  润新知