用Java实现:
给定数字N(0< N < 10000)和数字M(0< M < 10000)
检查数字N是否为素数,如果是,检查M是否为N的各个位数之和。
比如N为17,是素数,则检查M是否等于8(1+7)
public boolean f(int N, int M) {
boolean flag = true; //判断是否是素数的标志
for (int i = 2; i <= Math.sqrt(N); i++) { //Math.sqrt 是调用Math类中的sqrt方法,求一个数的平方根
if (N % i == 0) {
flag = false;
break;
}
}
//如果是素数则进行M=N个部分之和判断
if (flag) {
String str = String.valueOf(N);
int sum = 0;
for (int i = 0; i < str.length(); i++) {
sum += Integer.valueOf(String.valueOf(str.charAt(i))).intValue();
}
if (sum == M) {
return true;
}
}
return false;
}
for(int i=2 ; i<=N;i++){ //最小的素数是2
if(a % i == 0&& i != a){ //除了1和本身之后没有约数即为素数
System.out.println("不是素数");
break;
}else if(i == a){
System.out.println("是素数");
把N切开来相加判断就可以了
}
}
for(int n = 1 ;n<10000;n++){
if(n是否为素数){
for(int m = 1 ;m<10000;m++){
int count = n的个位数之和;
if(m == count)){
System.out.println("m="+m+";n="+n);
}
}
}
}
public class Test {
public static void main(String[] args) {
int numM = 8;
int digitNumN = 17;
if (isPrimeNumber(digitNumN, 10000)) {
System.out.println(isDigitSum(digitNumN, numM));
}
}
/**
@return
*/
public static boolean isPrimeNumber(int num, int end) {
if (num >= end) {
return false;
}
if (num == 0 || num == 1) {
return false;
}
boolean flag = true;
for (int i = 2; i < end; i++) {
if (num % i == 0 && (num / i != 1)) {
flag = false;
break;
}
}
return flag;
}
/**
判断num是不是digitNum各个位数之和
*
@param digitNum
@param num
@return
*/
public static boolean isDigitSum(int digitNum, int num) {
int sum = 0;
String digitNumStr = String.valueOf(digitNum);
char[] charArray = digitNumStr.toCharArray();
for (int i = 0; i < charArray.length; i++) {
sum = sum + Integer.valueOf(String.valueOf(charArray[i]));
}
return num == sum;
}
}