Codeforces Round #315 -Primes or Palindromes?(回文&&素数)

题目地址:Primes or Palindromes?

题意:给出p,q,A=p/q,求找出最大的n使得n以内的素数的个数<=A*n以内的回文串的个数。

思路:其实就是n以内的素数的个数*q<=n以内的回文串的个数*p。然而p/q的最大值为42,那么数到13000000就到达极限,所以我们直接可以从大的开始往小的一步一步的暴力枚举就可以(感觉窝还是太年轻。。QAQ

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
typedef __int64  LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-7;
const int maxn=2*1e6+10;
int npal[maxn],a[30];
int pri[maxn],npri[maxn];
int is_prime()
{
    memset(pri,0,sizeof(pri));
    for(int i=2;i<maxn;i++) {
        if(!pri[i]) {
            for(int j=i*2;j<maxn;j+=i) {
                pri[j]=1;
            }
        }
    }
}
int is_pal(int x)
{
    int cnt=0;
    while(x){
        a[cnt++]=x%10;
        x/=10;
    }
    for(int i=0;i<cnt/2;i++) {
        if(a[i]!=a[cnt-i-1])
            return 0;
    }
    return 1;
}
void init()
{
    memset(npri,0,sizeof(npri));
    memset(npal,0,sizeof(npal));
    for(int i=2;i<maxn;i++) {
        npri[i]=npri[i-1];
        if(!pri[i])
            npri[i]++;
    }
    for(int i=1;i<maxn;i++) {
        npal[i]=npal[i-1]+is_pal(i);
    }
}
int main()
{
    is_prime();
    init();
    int p,q;
    while(~scanf("%d %d",&p,&q)) {
        int flag=0;
        for(int i=maxn-1;i>=0;i--){
            if(q*npri[i]<=p*npal[i]) {
                flag=1;
                printf("%d\n",i);
                break;
            }
        }
        if(!flag) {
            puts("Palindromic tree is better than splay tree");
        }
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-24 01:38:12

Codeforces Round #315 -Primes or Palindromes?(回文&&素数)的相关文章

Codeforces Round #315 (Div. 1)

A. Primes or Palindromes? time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are too complex and un

算法15---数论6---素数,回文素数 分解质因素

算法15---数论6---素数,回文素数  分解质因素 1 /* 2 题目:素数,回文素数 3 author taoliu——alex 2016.10 number4 4 5 主要实现: 6 判断素数,判断回文素数 7 */ 8 9 10 11 #include <stdio.h> 12 #include <math.h> 13 14 15 16 //素数 17 18 19 int isprime(int a) 20 { 21 for (int i = 2; i < a; i

poj3247:回文素数

总时间限制: 5000ms 内存限制: 65536kB 描述 一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数.给定位数n,找出所有既是回文数又是素数的n位十进制数.(注:不考虑超过整型数范围的情况). 输入 位数n,其中1<=n<=9. 输出 第一行输出满足条件的素数个数. 第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分. 样例输入 1 样例输出 4 2 3 5 7 这道题挺简单的,本来自己是肯定能够想到平方

C++刷题——2704: 回文素数

2704: 回文素数 /* Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 5 月 26 日 * 版 本 号:v1.0 */ Description 输入一个数n,输出n以内所有的回文素数.回文素数,即既是素数,又是回文数,从前往后.从后往前看一个样.例373. Input 大于10的正整数n Output n以内所有的回文素数 Sample Input 500

HDU 1431 素数回文(回文素数)

http://acm.hdu.edu.cn/showproblem.php?pid=1431 题意: 给你两个整数a,b.(5 <= a < b <= 100,000,000)要你按顺序输出[a,b]区间内的所有回文素数. 分析: 定理:如果一个数是回文且有偶数位,那么它能被11整除. 根据上面定理我们可知我们只需要找到区间[2,1000W)内的素数即可.(想想为什么)上面b的范围直接缩小了10倍. 剩下的工作就是用筛选法求出1000W内的所有素数,然后对于给定的a和b,我们对于[a,b

HDU 1431 素数回文(打表+技巧,最大回文素数为9989899!!!)

素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17512    Accepted Submission(s): 4033 Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a

回文素数-2015校内选拔第三题

10301是个5位的素数.它有个特点,把数字倒过来还是它本身,具有这样特征的素数,我们称之为:回文素数. 105011060111311 这些都是5位的回文素数. 请你计算一下,像这样的5位数的回文素数,一共有多少个? 请填写这个表示个数的整数,注意不要写任何其它多余的内容,比如说明或解释文字,也不要列出所有的回文素数. 原文地址:https://www.cnblogs.com/jinyufanfan/p/10105434.html

Codeforces Round #315 (Div. 1) A. Primes or Palindromes? 暴力

A. Primes or Palindromes?Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3261 Description Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are too complex and unpredictable. A palindro

Codeforces Round #315 (Div. 2)——C. Primes or Palindromes?

这道题竟然是一个大暴力... 题意: π(n):小于等于n的数中素数的个数 rub(n) :小于等于n的数中属于回文数的个数 然后给你两个数p,q,其中A=p/q: 然后要你找到对于给定的A,找到使得π(n)?≤?A·rub(n) 最大的n. (A<=42) 思路: 首先我们可以暴力算出当n为大概150万左右的时候,π(n)大概是 rub(n) 的42倍. 所以我们只需要for到150万左右就好,因为对于后面的式子,肯定能在150万的范围内找到一个n使得这个式子成立的. 而且,我们可以得出因为素