标题:组素数
素数就是不能再进行等分的数。比如:2 3 5 7 11 等。
9 = 3 * 3 说明它可以3等分,因而不是素数。
我们国家在1949年建国。如果只给你 1 9 4 9 这4个数字卡片,可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个4 位的素数呢?
比如:1949,4919 都符合要求。
请你提交:能组成的4位素数的个数,不要罗列这些素数!!
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int count=0;
bool iswap(string str,int begin,int end){
for(int i=begin;i<end;i++){
if(str[i]==str[end])
return false;
}
return true;
}
void pailie(string str,int k,int m){
if(k>m){
int flag=1;
int sum=0;
for(int i=0;i<4;i++)
sum+=(str[i]-'0')*pow(10,3-i);
for(int j=2;j*j<=sum;j++){
if(sum%j==0)
flag=0;
}
if(flag)
count++;
}
else{
for(int i=k;i<=m;i++){
if(iswap(str,k,i)){
swap(str[k],str[i]);
pailie(str,k+1,m);
swap(str[k],str[i]);
}
else
break;
}
}
}
void swap(char *a,char *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int main(){
string str="1949";
pailie(str,0,3);
cout<<count<<endl;
return 0;
}
这道题的关键是全排列去重,一开始只想到全排列,结果得到12,输出中间值之后发现是全排列中没有去重,又去搜索了一下全排列如何去重,这个去重的实现以后还要多练习。