SRM 303U

SRM 303U

DIV2 1000

使用一个整数的所有素因子能否组成一个回文字符串?要求数出在A与B之间满足要求的这样的整数的数目。

暴力解决就OK,next_permutation 的复杂度要计算准确!不是简单的数目的阶乘!!

 

template<class T> string toString(T n){ostringstream ost;ost<<n;ost.flush();return ost.str();}
bool judge(string c)
{
    for(int i=0; i<=c.size()/2; i++)
    {
        if(c[i]!= c[c.size()-i-1]) return false;
    }
    return true;
}
bool func(int num)
{
    vector<string> p;
    int temp = num;
    for(int i=2; i*i<=num; i++)
    {
        while(temp % i==0)
        {
            p.push_back(toString(i));
            temp/=i;
        }
    }
    if(temp!=1) p.push_back(toString(temp));
    sort(p.begin(), p.end());
    do
    {
        string c;
        for(int i=0; i<p.size(); i++) c+=p[i];
        if(judge(c)){ for(int i=0; i<p.size(); i++) cout<<p[i]<<" "; cout<<endl; return true;}
    }while(next_permutation(p.begin(), p.end()));
    return false;
}
class PrimePalindromic
{
    public:
        int count(int A, int B)
        {
            int ret = 0;
            for(int i=A; i<=B; i++)
                if(func(i)){ cout<<" "<<i<<endl;  ret++;}
            return ret;
        }
};

你可能感兴趣的:(SRM 303U)