#include<stdio.h>
#include<stdlib.h>
struct int_e{
int *p;
int length;
};
int is_prime(int *primes,int length,int num){
int i;
for(i=0;i<length;i++){
if(*(primes+i)){
if(num%(*(primes+i))==0){
return 0;
}
}else{
//printf("%d--%d\n",i,*(primes+i));
break; }
}
return 1;
}
struct int_e primes(int limit){
int max_num = limit/2;
int real_num = 1,i;
int *primes = (int *)malloc(max_num*sizeof(int));
if(primes != NULL){
printf("茅坑太大了 没有");
//此处暂时不知道如何处理
return;
}
*primes = 2;
for(i=3;i<limit;i++){
if(is_prime(primes,max_num,i)){
*(primes+real_num)=i;
real_num++;
}
}
primes = realloc(primes,real_num*sizeof(int));
struct int_e primes_info = {p:primes,length:real_num};
return primes_info;
}
void main(){
struct int_e primes_info = primes(1000);
if(primes_info){
int length = primes_info.length,i;
int *primes = primes_info.p;
printf("\n========================\n");
for(i=0;i<length;i++){
printf("%d -- %d\n",i,*(primes+i));
}
}
}