3821. An Industrial Spy
TOJ第二题:http://acm.tju.edu.cn/toj/showp3821.html
两天没有写东西了,这两天比较纠结,发现什么都忘了。难道寒假就是个悲剧?
这个题是一个简单题。给一个字符串,求排列是素数的个数。不说了,贴代码:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
const int MAX_SIZE = 10000000;
int num[MAX_SIZE + 1];
int value[5000];
void prime_num(int range){
for (int i = 0; i <= MAX_SIZE; i++)
num[i] = 0;
if (range <= 10){
num[4] = 1;
num[6] = 1;
num[8] = 1;
num[9] = 1;
num[10] = 1;
}else {
int n = sqrt(range * 1.0);
int k;
prime_num(n);
for (int i = 2; i < n; i++){
if (num[i] == 0){
for (k = 2; k <= range / i; k++){
num[k * i] = 1;
}
}
}
}
}
int main()
{
int tot, n[10], sum, k[10], t, p;
prime_num(MAX_SIZE);
cin>>tot;
while (tot--)
{
string s;
cin>>s;
p = 0;
int len = s.length();
for (int i = 0; i < len; i++)
n[i] = s[i] - '0';
for (int i = 0; i < (1<<len); i++)
{
t = 0;
for (int j = 0; j < len; j++)
if (i & (1<<j))
k[t++] = n[j];
sort(k, k + t);
do
{
int m = 0, l = 1;
for (int i = 0; i < t; i++)
{
m += l * k[i];
l *= 10;
}
if (m >= 2 && !num[m])
value[p++] = m;
} while (next_permutation(k, k + t));
}
sum = 0;
sort(value, value + p);
for (int i = 0; i < p - 1; i++)
if (value[i] != value[i + 1])
sum++;
if (p)sum++;
cout<<sum<<endl;
}
return 0;
}
浙公网安备 33010602011771号