初学C,我的这个程序是不是过于繁琐了

这个是题目,没有找到答案:

题目内容:

我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。

现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

 

输入格式:

两个整数,第一个表示n,第二个表示m。

 

输出格式:

一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

 

输入样例:

2 4

 

输出样例:

15

这个是我的程序

#include<stdio.h>
int main(void)
{
    int m,n;
    printf("请输入两个正整数:\n");
    scanf("%d %d", &m, &n);
    //取得第m个质数的计算    
    int zhishu = 2;
    int begin = zhishu;
    int b;
    int i = 0;
    while ( i < m-1)
    {
        int a = 2;
        while ( begin>a)
        {
            b = begin%a;if ( b == 0)
            {
                goto A;     //该数为合数,跳出循环
            }
            
            a++;if ( begin == a)
            {
                i++;
                break;
            }
            
        }
        zhishu = begin;
        A:
        begin++;
    } 
    printf("%d\n", zhishu);         //测试输出第m个质数
    if ( m == n)
    {
        printf("第%d个质数为%d\n", m, zhishu);
        goto C;
    }
    
    
    i = 0;      //重置变量i
    int time = n - m;
    int next = zhishu+1;
    //累加从第m个质数开始至第n个质数  
    do
    {
        int a = 2;
        while ( next > a)
        {
            b = next%a;if ( b == 0 )
            {
                goto B;     //该数为合数,跳出循环
            }
            
            a++;if ( next == a)
            {
                i++;
                printf("%d\n", next);       //测试输出得到的下一个质数
                zhishu = zhishu + next;
                break;
            }
            
        }
        B:
        next++;
    } while ( i < time);

    printf("从第%d个质数到第%d个质数的和为%d\n", m, n, zhishu);
    
    C:
    return 0;
}

感觉我的程序有点过于繁琐了,而且还用了三个goto,所以比较不满意

求各位看看我的程序有什么改进的空间吗?

那个我感觉你代码太长了,应该不用那么复杂吧

下面是我的思路,有错的话可以指出来:

#include <stdio.h>
int f(int x)
{
	int i;
	for(i=2;i*i<=x;i++)
		if(x%i==0) return 0;  //能被整除说明不是素数
	return 1;
}
int main()
{
	int i,j,m,n,sum;
	scanf("%d%d",&m,&n);     
	for(i=2,j=0,sum=0;;i++)
	{
		if(f(i)==1)   //判断素数
		{
			j++;      //判断是第几个素数
		if(j>=m&&j<=n) sum+=i;  //是第m到第n之间的素数就相加
		if(j>n) break;   //超过n就可以退出循环输出结果了
		}
	}
	printf("%d\n",sum);  //输出结果
	return 0;
}