算法提高 素数求和

/*
  算法提高 素数求和  
问题描述
  输入一个自然数n,求小于等于n的素数之和
样例输入
2
样例输出
2
数据规模和约定
  测试样例保证 2 <= n <= 2,000,000
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>


#define BSSS (0)


void input( int [] , int );
void sc( int [] , int );
long long q_sum( int [] , int );


int main(void)
{
int n;
scanf("%d", &n );
int * a = (int *)calloc( 2000000 , sizeof(int) ) ;
input( a , n );
sc( a , n );
printf("%lld\n", q_sum( a , n ) );
free(a);
return 0;
}


long long q_sum( int a[] , int n )
{
long long sum = 0 ;
int i ;
for( i = 0 ; i < n ; i ++ )
{
if( a[i] != BSSS )
{
sum += a[i] ;
}
}
return sum ;
}


void sc( int a[] , int n )
{
int i;
for( i = 0 ; i < n ; i ++ )
{
if( a[i] != BSSS )
{
int bs;
for( bs = i + a[i] ; bs < n ; bs += a[i] )
{
a[bs] = BSSS ;
}
}
}
}


void input( int a[] , int n )
{
int i;
for( i = 0 ; i < n ; i ++ )
{
a[i] += i + 1 ;
}
a[0] = BSSS ;
}

猜你喜欢

转载自blog.csdn.net/qq_40990854/article/details/80032050