请用C++完成一个完数小程序

完数的定义:
如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14
本题任务是判断两个正整数之间完数的个数
输入
输入数据包含多行,第一行是一个正整数n,表示测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数num1和num2组成
(1<num1,num2<=10000)
输出
对于每组测试数据,请输出num1和num2之间(包括num1和num2)存在的完数个数
样例输入
2
2 5
5 7
样例输出
0
1


#include <iostream>
using namespace std;
int wanshu(int n)
{
    int i,sum=0;
    for(i=1;i<n;i++)
    {
        if(n%i==0)
            sum+=i;
    }
    if(n==sum)
        return 1;
    return 0;
}

int main()
{
    int n;
    int a,b;
    cin>>n;
    for(int i=0;i<n;++i)
    {
        int sum=0;
        cin>>a>>b;
        for(int j=a;j<=b;++j)
            sum+=wanshu(j);
        cout<<sum<<endl;
    }
    
    return 0;
}
#include<stdio.h>
#include<stdlib.h>

int main(){
    int m,n,k,count,t,j,x,sum;
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d%d",&m,&n);
        count=0;
        if(m>n) {t=m;m=n;n=t;}
        for(j=m;j<=n;j++){
        sum=0;    
        for(x=1;x<=j/2;x++){
        if(j%x==0) sum+=x;
        }
        if(sum==j) count++;
    }    
    printf("%d\n",count);
    }
return 0;
} 

int wanshu(int n)
{
    int i,sum=0;
    for(i=1;i<n;i++)
    {
        if(n%i==0)
            sum+=i;
    }
    if(n==sum)
        return 1;
    return 0;
}

int main()
{
    int n;
    int a,b;
    scanf("%d",&n);
    for(int i=0;i<n;++i)
    {
        int sum=0;
        scanf("%d %d",&a,&b);
        for(int j=a;j<=b;++j)
            sum+=wanshu(j);
        printf("%d\n",sum);
    }
    
    return 0;
}