HzuMomoc


私信TA

用户名:932521665

访问量:35960

签 名:

记得在搬砖中多摸鱼!!!

等  级
排  名 90
经  验 9079
参赛次数 8
文章发表 68
年  龄 0
在职情况 在职
学  校 贺州学院
专  业

  自我简介:

解题思路:1.偶数不是素数,而只有2是素数
               2.在编写判断素数递归函数时,只要排除了偶数的可能性,可以从3开始判断
注意事项:直接使用判断素数的老方法,会出现超时

              j>50000时要取模

参考代码:

#include <stdio.h>
#include <math.h>
typedef long long ll;
int ss(int n)
{
	ll i,y;
	if(n==4 || n==6 ||n==8 || n==9)
	   return 0;
	if( n==3 ||n==5 || n==7)//
	   return n;
	//大于9之后执行下面的代码,因为下面的代码不能判断上面的个别例子是否是素数
	y=(ll)sqrt((double)n);
	//在传入值的时候已经排除2的可能性,所以从3开始判断是否是素数
	for(i=3;i<=y;i=i+2)
	{
	        if(n%i==0)
		return 0;
        }
	return 1;
}
int main (){
	ll n;
	ll sum=1,j,x=0;//x标记个数
	scanf("%lld",&n);
	j=2;
	if(n==1)//排除素数2,因为2是偶数,j为奇数自增2之后不会等于2;
	{
		printf("2");
		return 0;//退出程序
	}
	if(n>1)
	{
		sum=sum*2;//如果j从2开始,j=j+2就不是奇数了,所有直接排除即可
		j=3;
		n=n-1;//减去特例2
		while(x!=n)
		{
			if(ss(j))
			{
				sum=sum*j%50000;
				x++;
			}
			j=j+2;//排除偶数
		}
	}
	printf("%lld",sum%50000);
	return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »