指针数组求100以内的素数

 

#include <stdio.h>

void prime(int *p)
{
    if(*p<=1) {
        *p = -1;
        return;
    }
    int i;
    for(i=2;i*i<=*p;i++)
        if(*p%i==0) {
            *p = -1;
            return;
        }
}

int main()
{
    int a[100];
    int i,j=0;
    for( i=0; i<100; i++ ) {
        a[i] = i+1;
    }
    for( i=0; i<100; i++ ) {
        prime(&a[i]);
    }
    for( i=0; i<100; i++ ) {
        if(a[i]!=-1){
            printf("%d ", a[i]);
        }
    }
    return 0;
}

 

int isPrime(int n){//判断素数
    for(int i = 2; i < n; i ++){
        if(n % i == 0)
            return 0;
    }
    return 1;
}
int* allPrime(int scale){
    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");
}
bool isPrime(int n)
{
    if(n<=1)
        return false;
    for(int i=2;i<=n/2;i++)
    {
        if(n%i==0)
            return false;
    }
    return true;
}

void main()
{
    int i,j,a[100],n=0;
    int *p = a;
    for(i=0;i<100;i++)
        *(p+i) = i+1;
    for(i=0;i<100;i++)
    {
        if(isPrime(*(p+i))
        {
            *(p+n) = *(p+i);
            n++;
        }
    }
    for(i=n;i<100;i++)
        *(p+i) = 0;
    for(i=0;i<n;i++)
        printf("%d ",*(p+i));
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m