C语言习题5.10--整数n和m之间的素数个数

C语言习题5.10--整数n和m之间的素数个数

时间: 1ms        内存:128M

描述:

小奶瓶都要上大三了,大一的高数还挂着呢,不光他头痛,教高数的"高"老师也是无奈,为了不必要的麻烦,"高"老师决定尽全力给小奶瓶加分,听说小奶瓶C语言学得不错,"高"老师就让他编写一个“求两个数之间的素数个数”的程序并许诺完成后给小奶瓶加59分。这样好的机会小奶瓶当然不能放过,但是他最近公务繁忙,不能及时完成这个程序。现在他把已经写的差不多的程序给你,让你帮他完成这个任务。请你帮帮这个可爱的小男生吧~

#include <stdio.h>
int primes(int n,int m);    /*求n,m之间素数个数*/
int is_prime(int n);    /*判断是否为素数*/
int main()
{
    int number; /*素数个数*/
    int n,m;
    scanf("%d %d",&n,&m);
    number=primes(n,m); /*调用求素数个数的函数,并将返回值赋值给number*/
    printf("%d\n",number);
    return 0;
}

提交时只需提交primes和is_prime两个函数

请注意:当n或者m小于2时的情况

输入:

两个数

输出:

两个数之间的素数个数

示例输入:

6 15

示例输出:

3

提示:

参考答案(内存最优[1092]):


#include <stdio.h>
int primes(int n,int m);    /*求n,m之间素数个数*/
int is_prime(int n);    /*判断是否为素数*/
int main()
{
    int number; /*素数个数*/
    int n,m;
    scanf("%d %d",&n,&m);
    number=primes(n,m); /*调用求素数个数的函数,并将返回值赋值给number*/
    printf("%d\n",number);
    return 0;
}
int primes(int n,int m)
{
    int i,t,flag,number=0;
    if(n>m){
        t=n;
        n=m;
        m=t;
    }
    for(i=n;i<=m;i++){
            flag=is_prime(i);
    if(flag==1)number++;
    }
    return number;
}
int is_prime(int n)
{
    int i;
    if(n==1 || n==0)return 0;
    for(i=2;i<=n/2;i++){
        if(n%i==0)return 0;
    }
    return 1;
}

参考答案(时间最优[0]):


#include <stdio.h>
int primes(int n,int m);    /*求n,m之间素数个数*/
int is_prime(int n);    /*判断是否为素数*/
int main()
{
    int number; /*素数个数*/
    int n,m;
    scanf("%d %d",&n,&m);
    number=primes(n,m); /*调用求素数个数的函数,并将返回值赋值给number*/
    printf("%d\n",number);
    return 0;
}int is_prime(int n)
{
	int i;
	if(n<2)
		return 0;
	for(i=2;n%i!=0;i++);
		if(i<n)
			return 0;
		return 1;
}
int primes(int n,int m)
{
	int s=0;
	if(n>m)
	{
		n=m+n;
		m=n-m;
		n=n-m;
	}
	for(n;n<=m;n++)
	{
		if(is_prime(n)==1)
			s++;
	}
	return s;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注