对于一个数n,取n的各个位的平方和m,若平方和m不等于1,继续取m的各个位的平方和,一直这样取下去,取1000次,若能在1000次内取到平方和为1,
称n为“快乐数”,若n还是素数,则称n为“快乐素数”。
判断一个数是否为“快乐素数”:
是的话输出这个数n,再输出取到平方和为1过程中历经的所有数字。
不是的话输出NO,再输出取三次平方和过程中每次取到的数。
例如:
1 输入7 输出 7 49 97 130 10 1
2 输入11 输出NO 2 4 16 37
#include<stdio.h>
#include<string.h>
int main()
{
int m = 1000, n;
int a[1000];
int i = 0, j, k;
int x, y = 0;
bool flag1 = true, flag2 = true;
for (j = 0;j < 1000;j++)
{
a[j] = 0;
}
scanf_s("%d", &n);
if (n <= 1)
{
flag1 = false;
}
for (k = 2;k < n;k++)
{
if (n % k == 0)
flag1 = false;
}
x = n;
while (m!=0)
{
while (x!=0)
{
k = x % 10;
a[i] = a[i] + k * k;
x = x / 10;
}
if (a[i] == 1&&flag1==true)
{
printf("%d ", n);
for (k = 0;k < i + 1;k++)
{
printf("%d ", a[k]);
}
flag2 = false;
break;
}
else
{
x = a[i];
m = m - 1;
i++;
}
}
if (flag1 == false||flag2==true)
{
printf("NO ");
for (k = 0;k < 4;k++)
printf("%d ", a[k]);
}
return 0;
}