zoukankan      html  css  js  c++  java
  • 洛谷 2425 小红帽的回文数

    https://www.luogu.org/problemnew/show/P2425#sub

    题目要求找到一个最小进制使这个数转为回文数,假设数字为a,那么当进制$sta >= a$时,sta进制下a为a,仅为一位数那么为回文数,然而当&sta=a-1&时,sta进制下数位11,也是回文数,然而题目中要求找到最小的回文数。

    我们想当$sta > sqrt a$时,转制以后这个数为二位数,因为要为回文数,那么第一位数和第二位数相等,我们假设都等于$j$,那么可以得出

    $$j imes sta+j=a$$

    $$j imes (sta+1)=a $$

    $$sta=a/j-1$$

    这是很显然的,当然j是a的一个因子。

    对于$sta le sqrt a$,暴力枚举判断一下就好了,不担心超时。

    注意:循环变量一定写 long long,开着int WA了2遍。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    #define LL long long
    LL n,a[10000],f;
    bool judge(LL c,LL sta)
    {
        f=1;
        int pos=0;
        while(c)
        {
            a[++pos]=c-c/sta*sta;
            c/=sta;
        }
        for(LL i=1,j=pos;i<=j;i++,j--)
        {
            if(a[i]!=a[j])
            {
                f=0;
                return f;
                break;
            }
        }
        return f;
    }
    int main()
    {
        LL x;
        scanf("%lld",&n);
        while(n--)
        {
            scanf("%lld",&x);
            if(x==2)
            {
                printf("3
    ");
                continue;
            }
            if(x<=3)
            {
                printf("2
    ");
                continue;
            }
            LL p=(LL)sqrt((double)x)+1;
            for(LL i=2LL;i<=p;i++)
            {
                if(judge(x,i))
                {
                    printf("%lld
    ",i);
                    break;
                }
            }
            if(!f)
            {
                for(LL i=x/p-1;i>=0;i--)
                {
                    if(x==x/i*i)
                    {
                        printf("%lld
    ",x/i-1);
                        f=1;
                        break;
                    }
                }
                
                if(!f)printf("%lld
    ",x+1);
            }
        }
    }
  • 相关阅读:
    Python 写文件
    Python 读文件
    Python 打开文件(File Open)
    Python 异常处理(Try...Except)
    Python PIP包管理器
    Python 正则表达式(RegEx)
    Python JSON
    Python 模块
    Python 迭代器(Iterator)
    Python 继承
  • 原文地址:https://www.cnblogs.com/rmy020718/p/9641175.html
Copyright © 2011-2022 走看看