求教大神,此题为何陷入死循环之中无法自拔

求500以内十个最大素数及其和并将其输出
int findbigsushu()
int main()
{
printf("\nsum=%d\n",sum);
return 0;
}
int findbigsushu()
{
int i,j,m,sum;
sum=0;
for(i=500;i>=1;i--)
{
for(j=2;j<i;j++)
{
for(m=1;m<=10;m++)
{
if(i%j==0)
{
printf("%6d",i);
sum=sum+i
m=m+1;
}
}
}
}
return sum;
}
为什么陷入死循环之中无法自拔

并不是死循环

         for (i = 500; i >= 1; i--) {
            for (j = 2; j < i; j++) {
                for (m = 1; m <= 10; m++) {
                    if (i % j == 0) {
                        printf("%6d",i);
                        sum = sum + i;
                        m = m + 1;
                    }
                }
            }
        }

只是所有符合 i % j == 0 的数都被统计了10次
for (m = 1; m <= 10; m++) {} 没有起到有效的限制作用 数据量为原来10倍

正确的限制如下:
int findbigsushu() {
        int i, j, m, sum;
        m = 0;
        sum = 0;
            for (i = 500; i >= 1; i--) {
                for (j = 2; j < i; j++) {
                    if (i % j == 0) {
                        printf("%6d",i);
                        sum = sum + i;
                        m = m + 1;
                        if (10==m){
                            return sum; //在得到第十个数的时候 结束方法
                        }
                        continue;//若符合条件就跳出当前循环 进入下个循环
                    }
                }
            }
        return sum;
    }

以为是java。。。

 #include<stdio.h>
int findbigsushu();
int main()
{
    int sum  = findbigsushu();
printf("\n sum = %d \n",sum);
return 0;
}
int findbigsushu()
{
int i,j,m,sum;
bool juge = false;
sum=0,m=0;
for(i=500;i>=1;i--)
{
for(j=2;j<i;j++)
{
if(i%j==0){
    break;
}
}
if(j==i){
    m++;
    sum = sum + i;
    printf("%2d i=%2d\n",m,i);
}
if(m==10){
    break;
}
}
return sum;
}

//看不懂你m的意思

因为M那里,每次循环,都重新计算一遍

,,看你这个问题,,,再次打开了C 的编辑器,,,这个是我刚计算的,测试成功

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int max ;
printf("请输入一个 数字:");
scanf("%d",&max);
printf("\n%d", fun_bigsushu(max));
}
int fun_bigsushu(int max )
{
int i,j,m,sum ,is_ok;
m = sum = is_ok = 0 ;
for(i=max;i>1;i--)
{
if( m ==10)
break;
is_ok = 0;
for(j=i-1 ;j> 1;j--)
{
if(i % j == 0)
is_ok=1;
}
if(is_ok == 0 )
{
sum += i ;
m+=1;
printf("%d,",i);
}
}
return sum ;
}图片说明

    int i,j,sum;

    int m = 0;//m用来计数

    sum=0;//用来计算和,

    for(i = 500; i >= 1; i--)
    {
        if(m >= 10)
        {
            break;
        }

        for(j = 2; j < i; j++)
        {
            if( i%j == 0)break;//不是素数

        }

        if( j > sqrt(i))//是素数
        {
            printf("%6d",i);
            sum = sum + i;
            m = m + 1;
        }


    }