#include <stdio.h>
#include <math.h>
#define MAX_NUM 54321 //组合上限
#define MAX_LEN 100 //结果数组最大长度
#define N 5 //组合数最大长度
//判断一个数是不是质数 int isPrime(int n);
//切分整数到数组中 void cutNum(int n, int * tArr, int * len);
//判断数组中数据是否越界 int isIn(int * tArr, int len);
//判断数组中数据是否重复 int isNoRep(int * tArr, int len);
//打印数组 void printArr(int * tArr, int len);
int main() {
int i;
int cnt; //结果数量
int len; //数字长度
int iArr[MAX_LEN]; //数组保存结果
int tArr[N]; //临时数组保存中间结果
//取数 for (i=2, cnt=0; i < MAX_NUM; i++)
{
//切割数到数组中
cutNum(i, tArr, &len);
//判断数有没有越限
if (!isIn(tArr, len))
{
continue;
}
//判断数有没有重复 if (!isNoRep(tArr, len))
{
continue;
}
//判断是不是质数
if (!isPrime(i))
{
continue;
}
//满足条件保存到结果数组中
iArr[cnt] = i;
cnt++;
}
//打印结果 printArr(iArr, cnt); getchar(); }
//判断一个数是不是质数
int isPrime(int n)
{
int i;
int rst = 1;
for (i=2; i <= sqrt(n); i++)
{
if(0 == n % i)
{
rst = 0;
break;
}
}
return rst;
}
//切分整数到数组中
void cutNum(int n, int * tArr, int * len)
{
int i;
for(i = 0; n > 0; i++) { tArr[i] = n % 10; n /= 10; }
*len = i;
}
//判断数组中数据是否越界 int isIn(int * tArr, int len)
{
int i;
int rst = 1;
for (i = 0; i < len; i++)
{
if ((tArr[i] > 5) || (0 == tArr[i]))
{
rst = 0;
break;
}
}
return rst;
}
//判断数组中数据是否重复 int isNoRep(int * tArr, int len)
{
int i, j;
int rst = 1;
for (i = 0; i < len-1; i++)
{
for(j = i + 1; j < len; j++)
{
if (tArr[i] == tArr[j])
{
rst = 0;
break;
}
}
}
return rst;
}
//打印数组 void printArr(int * tArr, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d\t", tArr[i]);
}
printf("\n共%d\n", len);
}