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)存在的完数个数。

样例输入 Copy
2
2 5
5 7
样例输出 Copy
0
1
提示
1 < num1 <= num2 <= 10000
我的代码
#include
using namespace std;

int main()
{
int n;
cin>>n;
int a[n][2];
for(int i = 0;i<n;i++)
for(int j=0;j<2;j++)
cin>>a[i][j];
for(int k =0;k<n;k++)
{
int s=0;
for(int l=a[k][1];l<a[k][2];l++)
{
int sum=0;
for(int j=1;j<l/2;j++){
if(l%j==0)
sum+=j;
if(sum==l)
s+=1; }

     }cout<<s<<endl;
    
}
return 0;

}

1是C语言不支持用变量定义数组大小
2是for(int l=a[k][1];l<a[k][2];l++)这里数组越界了,数组下标从0开始,应该是for(int l=a[k][0];l<a[k][1];l++)
3. if(sum==l) s+=1; 需要放在if语句的外面。
代码修改如下:

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int** a;//[n][2];
    a = new int*[n];
    for(int i = 0;i<n;i++)
    {
        a[i] = new int[2];
        for(int j=0;j<2;j++)
            cin>>a[i][j];
    }
    for(int k =0;k<n;k++)
    {
        int s=0;
        for(int l=a[k][0];l<a[k][1];l++)
        {
            int sum=0;
            for(int j=1;j<l/2;j++)
            {
                if(l%j==0)
                    sum+=j;
            }
            if(sum==l)
                s+=1;

        }
        cout<<s<<endl;

    }
    //释放空间
    for(int i = 0;i<n;i++)
    {
        delete[] a[i];a[i] =0;
    }
    delete[] a;
    a=0;
    return 0;
}

for(int k =0;k<n;k++)
{
      int s=0;
      for(int l=a[k][1];l<=a[k][2];l++)
      {
          int sum=0;
          for(int j=1;j<l;j++)
          {
              if(l%j==0)
                  sum+=j;
          }
          if(sum==l)
                s+=1; 
        }
        cout<<s<<endl;
}