素数求和

2022-02-09 10:50:18 浏览数 (1)

200万以内素数求和

这是刚开始写的代码,有点长。

代码语言:javascript复制
#include <stdio.h>
#include <math.h>
/*
200万以内素数求和
*/ 
int main()
{
	int i;
	long long int p=0;
	int n,num,s,tmp=0;
	scanf ("%d",&n);	
	for (num=0;num<=n;num  )
{
	if(num ==2|| num==3 )//对2||3特殊处理 
	{
	p =num;
	continue;}
{
    if(num %6!= 1&&num %6!= 5)//如果是素数,必然在6的旁边 
    continue;
    tmp=sqrt( num);
    for(i=2;i <=tmp; i   )//在6的旁边也不一定是素数,再次进行判断 
    {s=0;
	if(num %i== 0)
    {
    s=1;
    break;
	}
	}
    if (s==0) //实现累加 
    p =num;
} 
}
printf ("%lld",p);
return 0;
}

最后看到了网上一个代码,效率极高

然后敲了一遍

思路借鉴之点击打开链接

代码语言:javascript复制
#include <stdio.h>
/*
	2000万内素数求和
*/ 
int a[20000001]={0};//定义一个20000001的容器 
int main()
{
	int i,j,n;
	long long p=0;
	scanf ("%d",&n);
	for (i=2;i*i<=n;i  )//从2开始,对其倍数标记 
	{
	if (a[i]==1) 
	continue;
	for (j=i*i;j<=n;j =i)//进行标记
	a[j]=1;
	}

	for (i=2;i<=n;i  ) 
	if (a[i]==0)//未标记的即为素数 
	p =i;
	printf ("%lld",p);
	return 0;
	
}

0 人点赞