1. 判断绝对素数
题目链接:http://csp.magu.ltd/problem/J1055
【问题描述】
如果一个自然数是素数,且它的各位上的数字位置经过对换后仍为素数,则称其为绝对素数。例如13,各数字对换后是31,13和31都是素数,则13和31都是绝对素数。
编写程序,输入正整数n,求出10~n之间所有的绝对素数。
【题解代码】
#include <iostream>
using namespace std;
int prime(int x)
{
for (int i = 2; i <= x/i; i ++)
if (x % i == 0)
return false;
return true;
}
int main()
{
int n;
cin >> n;
for (int i = 10; i <= n; i++)
{
int x = i, m = 0;
while (x > 0)
{
m = m * 10 + x % 10;
x = x / 10;
}
if (prime(i) && prime(m))
cout << i << ' ';
}
}
2. 亲和数对
题目链接:http://csp.magu.ltd/problem/J1056
【问题描述】
自然数 a 的因子是指能被 a 整除的所有自然数,例如 12 的因子为:1、2、3、4、6、12。若自然数 a 的因子(不包括自身)之和为 b ,而且 b 的因子(不包括自身)之和又等于 a,且 a 和 b 不相等,则称 a,b 为一对“亲和数” 。
编写程序,输入正整数 n,输出 1~n 之间的亲和数对。
【题解代码】
#include <iostream>
using namespace std;
int get(int n) {
int sum = 0;
for (int i = 1; i < n; i ++) {
if (n % i == 0) sum += i;
}
return sum;
}
int main()
{
int n;
cin >> n;
bool f = false;
for (int i = 1; i <= n; i ++) {
int b = get(i);
if (i < b && get(b) == i) {
f = true;
cout << i << " " << b << endl;
}
}
if (f == false) cout << "NO";
return 0;
}