PE 49

Posted ygxcj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PE 49相关的知识,希望对你有一定的参考价值。

题意:1487, 4817, 8147是公差为3330的等差数列,并且三个数都是质数、构成这三个数的数都是一样的。求出另一个满足条件的四位数。

思路:先将4位数的质数找出来,然后分解,重新排列,找到由这几个数构成的所有质数,然后判断是否有满足条件的。可以用vis数组判断这个数是否已经构造过。

技术图片
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const ll maxn=1e7;
int v[maxn];
struct Prime
{
    int prime[maxn];
    int s;
    Prime()
    {
        for(int i=2; i<maxn; i++)
        {
            if(!v[i])
            {
                prime[s++]=i;
                for(int j=2; j*i<maxn; j++)
                    v[i*j]=1;
            }
        }
    }
};
Prime p;
int vis[maxn];
void check(int c)
{
    int a[4];
    int k=0;
    while(c)
    {
        a[k++]=c%10;
        c/=10;
    }
    sort(a,a+4);
    int b[50];
    set<int>st;
    int s=0;
    do
    {
        k=a[0]*1000+a[1]*100+a[2]*10+a[3];
        if(k<1000||v[k])
            continue;
        b[s++]=k;
        vis[k]=1;
        st.insert(k);
    }
    while(next_permutation(a,a+4));
    sort(b,b+s);
    for(int i=0; i<s-2; i++)
        for(int j=i+1; j<s; j++)
        {
            if(v[2*b[j]-b[i]]||!st.count(2*b[j]-b[i]))
                continue;
            cout<<b[i]<<" "<<b[j]<<" "<<2*b[j]-b[i]<<endl;
            return ;
        }
}
int main()
{
    for(ll i=1000; i<9999; i++)
    {
        if(!v[i]&&!vis[i])
            check(i);
    }
    return 0;
}
View Code

 

以上是关于PE 49的主要内容,如果未能解决你的问题,请参考以下文章

PE 49

不要在片段中显示列表视图项

有人知道下面的代码片段是啥意思吗?

Jekyll 偏移代码片段高亮的初始行

如何在 Django Summernote 中显示编程片段的代码块?

片段中的 Android 相机预览