关于#c语言#的问题,如何解决?

有没有人帮我看看这个问题出在哪?
题目:在屏幕上输出m以内所有满足要求的数。要求:该数除了1和本身之外所有因子之和为n,如果没有满足条件的数则输出"no such numbers"
【输入形式】
m n
【输出形式】
除了1和本身之外所有因子之和为n的数

"no such numbers"
【样例输入】
200 30
【样例输出】
32 125 161

#include
int main()
{
    int m,n,i,j,c,a;
    c=0;
    scanf("%d %d",&m,&n);
    for(i=1;i<=m;i++)
    {
        for(j=2;j<=i/2;j++)
        {
            if(i%j==0)
            {
                c+=j;
            }
        }    
        if(c==n&&i!=i&&i!=1)
        {
            printf("%d ",i);
            a=1;
        }
        else
            printf("no such numbers");   
    }
} 

#include<stdio.h>
int main()
{
    int m,n,i,j,c,a;
    c=0;
    scanf("%d %d",&m,&n);
    for(i=2;i<=m;i++)
    {
        c=0;
        for(j=2;j<=i/2;j++)
        {
            if(i%j==0)
            {
                c+=j;
            }
        }    
        if(c==n)
        {
            printf("%d ",i);
            a=1;
        }
    }
    if(a==0)
       printf("no such numbers");   
} 
 

第一,第16行i!=i错了,应删去;
第二,第22至23行,这一步错了:应该检测所有数都不符合条件再输出"no such numbers"
第三,每次循环完以后,计数器c应清零。
改好后代码:

#include<stdio.h>
int main()
{
    int m,n,i,j,c,a,flag=0;
    c=0;
    scanf("%d %d",&m,&n);
    for(i=1;i<=m;i++)
    {
        for(j=2;j<=i/2;j++)
        {
            if(i%j==0)
            {
                c+=j;
            }
        }    
        if(c==n&&i!=1)
        {
            printf("%d ",i);
            flag=1; 
        }
        c=0;
    }
    if(!flag){
        printf("no such numbers");
    }
}