zoukankan      html  css  js  c++  java
  • virtual hust 2013.6.21 NEFU 挑战编程----数论 F

    题目:Smith Numbers

    思路: 从当前数字开始往上暴力,找到合数之后质因式分解,看是否满足那个关系。

    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    #define maxn 40000
    bool vis[maxn];
    int n_prime=0;
    int prime[maxn/8];
    int cnt[maxn/8];
    void Prime()
    {
        memset(vis,true,sizeof(vis));
        vis[0]=vis[1]=0;
        for(int i=2;i<maxn;i++)
            if(vis[i])
            {
                prime[++n_prime]=i;
                for(int j=2*i;j<maxn;j+=i)
                    vis[j]=false;
            }
        //cout<<n_prime<<":"<<prime[n_prime]<<endl;
    }
    bool is_prime(int n)
    {
        if(n<maxn)
            return vis[n];
        for(int i=1;i<=n_prime;i++)
        {
            if(n%prime[i]==0)
                return false;
        }
        return true;
    }
    int digit_sum(int n)
    {
        int ans=0;
        while(n)
        {
            ans+=n%10;
            n/=10;
        }
        return ans;
    }
    int main()
    {
        Prime();
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            int ans=n+1;
            while(1)
            {
                if(is_prime(ans))
                {
                    ans++;
                }
                else
                {
                    int tmp=digit_sum(ans);
                    memset(cnt,0,sizeof(cnt));
                    int tnt=ans;
                    int pnt=0;
                    for(int i=1;i<=n_prime;i++)
                    {
                        if(tnt<prime[i])
                            break;
                        while(tnt%prime[i]==0)
                        {
                            cnt[i]++;
                            tnt/=prime[i];
                        }
                        pnt+=cnt[i]*digit_sum(prime[i]);
                    }
                    if(tnt!=1)
                        pnt+=digit_sum(tnt);
                    if(pnt==tmp)
                    {
                        printf("%d
    ",ans);
                        break;
                    }
                    ans++;
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    洛谷—— P3353 在你窗外闪耀的星星
    洛谷—— P1238 走迷宫
    洛谷—— P1262 间谍网络
    9.8——模拟赛
    洛谷—— P1189 SEARCH
    算法
    May 22nd 2017 Week 21st Monday
    May 21st 2017 Week 21st Sunday
    May 20th 2017 Week 20th Saturday
    May 19th 2017 Week 20th Friday
  • 原文地址:https://www.cnblogs.com/overflow/p/3148936.html
Copyright © 2011-2022 走看看