判定友好数ペア(関数トピック)

2878 ワード

タイトルの説明
2つの正の整数mとnを入力し、mからnの間のすべての友好数ペアを順次出力します.
2つの整数のすべての正の因子の和(1を含む、自己を含まない)が相手に等しい場合、この対数は友好的であると称される.例えば、1184と1210は友好的な数対である.1184の因子の和は1+2+4+8+16+32+37+74+148+296+592=12120の因子の和が1+5+10+11+22+55+110+121+6022+605=1184であるため、プログラムはfacsum()関数とmain()関数を定義する必要がある.facsum()関数はnのすべての正因子の和を計算して返し,残りの機能はmain()関数で実現する.int facsum(int n){//nのすべての正因子の和sumを計算し、この関数はsum}を返します.
入力
2つの正の整数mとn,1を入力します.
しゅつりょく
mとnの間のすべての友好数対を出力する.各友好数ペアを出力する場合、小数を前、大数を後にし、重複する数ペアを削除する必要があります.例えば、220および284は1対の友好数であり、284および220も1対の友好数であり、この場合、220および284の友好数を出力するだけでよい.各友好数ペアは1行を占め、2つの数の間はスペースで区切られています.
mとnの間に友好数対がない場合は「No answer」を出力する.
サンプル入力
100 8000

サンプル出力
220 284
1184 1210
2620 2924
5020 5564
6232 6368

ヒント:直接出力しないでください.そうすると出力が限界を超え、友好実数ペアを保存します.#include #include int fac( int n)   {       int i,m,sum=1;          for (i=2;i          {          if (n%i==0)              {               m=n/i;              sum=sum+i;// N ;              }          }          return sum; } int main( )   {       int m,n,i,j,flag=0;           scanf ( "%d%d" ,&m,&n);            int s[n];                 for (i=0;i<=n-m;i++)                      s[i]=fac(i+m);// 。                 for (i=m;i                      {                          j=s[i-m];                 if (j>i&&j<=n&&s[j-m]==i)                      flag=1,// 。                      printf ( "%d %d
"
,i,j);                 }                 if (!flag)                  printf ( "No answer
"
);     return 0;