列出任意正整数之内的所有素数

seele42 2018-01-21 11:42:08
#include <stdio.h>
#include <stdlib.h>

int main()
{
int n = 0;
int i = 0;
int x = 0;
int cnt = 0;
int *a;

scanf("%d", &n);
a = (int *)malloc(n*sizeof(int));
for (i=0; i<=n; i++){
a[i] = 1;
}

for(i=2; i<=n; i++){
if (a[i]==1){
for(x=2; x*i<=n; x++){
a[x*i] = 0;
}
printf("%d ", i);
cnt++;
if (cnt%10==0){
printf("\n");
}
}
}

free(a);

return 0;
}

代码可以跑起来,想知道有没有哪里还可以改进,谢谢各位!
...全文
457 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-01-22
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int is_prime(int n);

int main()
{
    int n = 0;
    int i = 0;
    int x = 0;
    int k;
    int cnt = 0;
    int *a;

    scanf("%d", &n);
    a = (int *)malloc((n / 2 + 1) * sizeof(int));

    if (n < 2)
        return 0;


    k = 0;
    a[k++] = 2;
    printf("%d ", 2);
    for (i = 3; i <= n; i++) {
        if (is_prime(i)) {
            a[k++] = i;
            printf("%d ", i);
            cnt++;
            if (cnt % 10 == 0)
                printf("\n");
        }
    }

    putchar(10);
    free(a);

    return 0;
}

int is_prime(int n)
{
    int i;

    int len = sqrt(n) + 1;
    for (i = 2; i < len; i++)
        if (n % i == 0)
            break;
    if (i >= len)
        return 1;

    return 0;
}
参考一下吧
Commencel 2018-01-22
  • 打赏
  • 举报
回复
楼主如果需求速度的话,可以去搜一下素数筛法
赵4老师 2018-01-22
  • 打赏
  • 举报
回复
Finding prime numbers - Kenneth Haugland Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧