写的这个程序运行以后为什么没结果?该如何解决

写的这个程序运行以后为什么没结果???
下面的程序是求n以内的亲密数。如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。程序编译通过,但为什么没结果?
#include   <iostream>
#include   <vector>
using   namespace   std;
vector <int>   numsum(int);//此函数用来求n以内的亲密数,并将数压入一vector
int   main()
{
vector <int>   a;
cout < < "These   pairs   of   numbers   that   are   less   than   3000   are:\n ";
a=numsum(3000);
vector <int> ::iterator   iter=a.begin(),iter_end=a.end();
for(int   i=1;iter!=iter_end;iter=iter+i,i++)
{
cout < <*iter < < "   ";
if(i%2==0)cout < < "\n ";//一对一对输出
}
return   0;
}
vector <int>   numsum(int   n)
{
vector <int>   numbers;
for(int   a=1;a <n;a++)
{
int   m1=0,m2=0;
for(int   b=2;b <n;b++){
for(int   i=1;i <=a/2;i++)  
if(!(a%i))m1+=i;//求因子之和
for(int   j=1;j <=b/2;j++)
if(!(b%j))m2+=j;
if(m1==m2)
{
numbers.push_back(a);//如果相等存入vector
numbers.push_back(b);
}
}
}
return   numbers;
}


------解决方案--------------------
粗粗看了一下 , 感觉好像算法错了。。
算法好像 和描述的不大一样
m1 == m2 貌似比较的是两个因子是不是相等。。
而要求上说的是 : A的因子之和等于B,B的因子之和等于A

------解决方案--------------------
楼主编写的程序是错的,和题意不符合
------解决方案--------------------
效率低,而且算法还有问题。下面的很简单,且思路也很清晰:
#include <stdio.h>
int main()
{
int a,i,b,n;
printf( "There are following friendly--numbers pair smaller than 3000:\n ");
for(a=1;a <3000;a++) /*穷举3000以内的全部整数*/
{
for(b=0,i=1;i <=a/2;i++) /*计算数a的各因子,各因子之和存放于b*/
if(!(a%i))b+=i; /*计算b的各因子,各因子之和存于n*/
for(n=0,i=1;i <=b/2;i++)
if(!(b%i))n+=i;
if(n==a&&a <b)
printf( "%4d..%4d \n ",a,b); /*若n=a,则a和b是一对亲密数,输出*/
}
}