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;
}
};