求Smith数:若一个合数的质因数分解式逐位相加之和等于其本身逐位相加之和,则称这个数为Smith数。给定一个正整数N,求大于N的最小Smith数。
#include <stdio.h>
int sum2 = 0;
void sum(int x) {
sum2 = 0;
while (x != 0) {
sum2 = sum2 + x % 10;
x = x / 10;
}
}
int panduan(int x) {
for (int i = 2; i <= x / 2; i++) {
if (x % i == 0) {
return 1;
}
}
return 0;
}
int main() {
int x;
printf("请输入x的值:");
scanf("%d", &x);
int y, z;
y = x;
z = x + 1;
int sum1 = 0;
while (true) {
sum1 = 0;
y = z;
sum(y);
for (int i = 2; i <= y / 2; i++) {
if (y % i == 0) {
int j = i;
while (j != 0) {
sum1 = sum1 + j % 10;
j = j / 10;
}
y = y / i;
if (panduan(y)) {
i = 2;
} else {
while (y != 0) {
sum1 = sum1 + y % 10;
y = y / 10;
}
break;
}
}
}
if (sum2 == sum1) {
printf("%d是一个大于%d的最小Smith数\n", z, x);
break;
} else {
z++;
}
}
return 0;
}
今天的实验算法课实验,写的毫无逻辑。。。。