问题描述
打印10000以内的所有孪生数;
孪生数定义:一个数的约数和的约数和等于其本身,那么这个数和他的约数和为一对孪生数,例:220的约数和为284,284的约数和为220,那么220和284为一对孪生数。(此题目的约数和都不包括本身这个约数),注:6是完全数,而不是孪生数,220 284 和284 220属于同样一对孪生数 。
输入
无
提示
这道题可以用自创函数来做,一个数的约数和等于另一个数,关键是不能重复输出。
c++代码如下
满分代码
#include <bits/stdc++.h>
using namespace std;
int ysh(int n)
{
int s=0;
for(int i=1;i<=sqrt(n);i++)
{
if(n%i==0){
if(i==n/i)
s+=i;
else s+=i+n/i;
}
}return s;
}
int ysh2(int m){
int s=1;
for(int i=2;i*i<=m;i++)
{
if(m%i==0){
if(i==m/i)
s+=i;
else s+=i+m/i;
}
}return s;
}
int main()
{
int s=0,k=0;
for(int i=2;i<=10000;i++)
{
int j=ysh2(i);
if(ysh2(j)==i&&ys