如果a的因式分解的和等于b,并且反过来也成立,就说a和b是恋爱数,求第k对恋爱数。。。
暴力打表
#include"stdio.h"
#include"string.h"
#define N 6000000
int a[N];
int b[N][2],t;
void init()
{
int i,j;
for(i=1;i<N;i++)
a[i]=1;
for(i=2;i<N;i++)
{
for(j=i+i;j<N;j+=i)
a[j]+=i;
}
t=0;
for(i=2;i<N;i++)
{
if(a[i]<N&&a[a[i]]==i&&i<a[i])
{
b[t][0]=i;
b[t][1]=a[i];
t++;
}
}
}
int main()
{
init();
freopen("out.txt","w",stdout);
int i;
for(i=0;i<t;i++)
printf("%d,%d,",b[i][0],b[i][1]);
return 0;
}
输出
#include"stdio.h"
#include"string.h"
#define N 6000000
int a[100][2]={0,0,220,284,1184,1210,2620,2924,5020,
5564,6232,6368,10744,10856,12285,14595,17296,18416,
63020,76084,66928,66992,67095,71145,69615,87633,79750,
88730,100485,124155,122265,139815,122368,123152,141664,
153176,142310,168730,171856,176336,176272,180848,185368,
203432,196724,202444,280540,365084,308620,389924,319550,
430402,356408,399592,437456,455344,469028,486178,503056,
514736,522405,525915,600392,669688,609928,686072,624184,
691256,635624,712216,643336,652664,667964,783556,726104,
796696,802725,863835,879712,901424,898216,980984,947835,
1125765,998104,1043096,1077890,1099390,1154450,1189150,
1156870,1292570,1175265,1438983,1185376,1286744,1280565,
1340235,1328470,1483850,1358595,1486845,1392368,1464592,
1466150,1747930,1468324,1749212,1511930,1598470,1669910,
2062570,1798875,1870245,2082464,2090656,2236570,2429030,
2652728,2941672,2723792,2874064,2728726,3077354,2739704,
2928136,2802416,2947216,2803580,3716164,3276856,3721544,
3606850,3892670,3786904,4300136,3805264,4006736,4238984,
4314616,4246130,4488910,4259750,4445050,4482765,5120595,
4604776,5162744,5123090,5504110,5147032,5843048,5232010,
5799542,5357625,5684679,5385310,5812130,5459176,5495264,};
int main()
{
int n;
while(scanf("%d",&n)!=-1)
printf("%d %d\n",a[n][0],a[n][1]);
return 0;
}