标题: 组素数
素数就是不能再进行等分的数。比如:2 3 5 7 11 等。
9 = 3 * 3 说明它可以3等分,因而不是素数。
我们国家在1949年建国。如果只给你 1 9 4 9 这4个数字卡片,可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个4位的素数呢?
比如:1949,4919 都符合要求。
请你提交:能组成的4位素数的个数,不要罗列这些素数!!
注意:不要提交解答过程,或其它的辅助说明文字。
利用全排列将符合条件的所有数都输出,然后人工筛选并计数因为直接用程序输出个数,涉及元素的去重问题,本人尚未解决。(2019/11/13已在最后附最新解法)
//朱茂强 QQ:896228072(望大牛们指教)
public class Set_of_Primes {
public static void FullPermutation(char a[], int start, int end) {
if (start == end) {
String str = new String(a);
int ans = Integer.parseInt(str);
for (int m = 2; m < ans; m++) {
if (ans % m == 0) {
break;
}
}
System.out.println(ans);
} else {
for (int i = start; i <= end; i++) {
swap(a, start, i);
FullPermutation(a, start + 1, end);
swap(a, start, i);
}
}
}
public static void swap(char a[], int i, int j) {
char temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Set_of_Primes t = new Set_of_Primes();
char arr[] = { '1', '9', '4', '9' };
t.FullPermutation(arr, 0, 3);
}
}
最新解法:
public class 组素数 {
public static void fullpermutation(int arr[], int start, int end) {
if (start == end) {
chack(arr);
}
for (int i = start; i < arr.length; i++) {
swap(arr, start, i);
fullpermutation(arr, start + 1, end);
swap(arr, start, i);
}
}
static Set<Integer> set = new HashSet<>();// 去重
private static void chack(int arr[]) {
int ans = arr[0] * 1000 + arr[1] * 100 + arr[2] * 10 + arr[3];
boolean bool = true;
for (int i = 2; i <= ans / 2; i++) {
if (ans % i == 0) {
bool = false;
System.out.println(ans + "no");
break;
}
}
// 注意这里的break要直接跳出for循环
if (bool) {
set.add(ans);// 只追加不重复的结果
System.out.println(ans + "yes");
}
}
public static void swap(int a[], int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = { 1, 4, 9, 9 };
fullpermutation(arr, 0, 3);//注意这里是数组下标值,不要越界
System.out.println(set.size());
}
}