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