/*用筛选法求给出范围之内的素数。*/
#include
#include
int isPrime(int n){//判断素数
for(int i = 2; i < n; i ++){
if(n % i == 0)
return 0;
}
return 1;
}
int* allPrime(int scale){//这个函数要存储下来给定范围内的所有素数
/*而因为这个存储函数不在main函数内,如果用数组存储仅仅是局部变量,
无法实现跨函数输出,因此想到用指针代替,int* 代表输出结果是个指针*/
int cnt = 0;//记录有多少个素数,便于之后分配指针内存
for(int i = 2; i <= scale; i ++){//有cnt个素数
if(isPrime(i))
cnt ++;
}
int* store = malloc(sizeof(int) * cnt);//分配cnt个大小的内存空间
int serial = 0;//将各个素数按顺序存进指针中,serial代表元素
for(int i = 2; i <= scale; i ++){//再次走遍范围内所有数
if(isPrime(i)){//判断是否为素数
* (store + serial) = i;//存进指针
serial ++;
}
}
*(store + cnt) = 0;//最后一个元素的下一位设零
return store;//返回指针
free(store);//释放空间
}
int main(){
int scale;//输入范围
scanf("%d", &scale);
for(int i = 0; * (allPrime(scale) + i) != 0; i ++){//i代表元素
/*判断条件就是当前指针元素是否非零,非零就输出来,为零,说明结束*/
printf("%d ", * (allPrime(scale) + i));//取出指针中的值
}
printf("\n");
}
发表于 2019-12-24 12:22:03
回复(1)