在计蒜客学习时被一道练习题卡住了,做不出来就不能学习后面的内容,大家帮帮我,贡献下C语言代码吧

题目:小度机器人最近正在添加功能,Robin希望小度机器人可以告诉他从1到N(1<N<=10000)有多少个素数。请你来帮帮他吧?输入包括一行,仅一个数字N。输出在(1,... 题目:
小度机器人最近正在添加功能,Robin希望小度机器人可以告诉他从1到N( 1 < N <= 10000)有多少个素数。请你来帮帮他吧?
输入包括一行,仅一个数字N。
输出在(1, N]区间内的所有的素数。
提示:想像将(1, N]的数字看成沙子和小石头,视非素数为沙子,视素数为小石头。将沙子筛走,剩下的就是小石头了。考虑到N最大也就是10000,你可以开一个长度为10000的数组,让数组元素的值作为筛去与否的标志,比如筛去以后让元素值为1,然后依次输出就可以了。当然,如果你有更好的办法,也可以试试哦!
样例输出:8

结果: 2 3 5 7
样例输出改成样例输入
展开
 我来答
478617
推荐于2016-03-31 · TA获得超过875个赞
知道小有建树答主
回答量:725
采纳率:100%
帮助的人:93.3万
展开全部
#include <stdio.h>
#include <malloc.h>
#include <math.h>

typedef char BOOL;
#define TRUE  1
#define FALSE 0
void prime(BOOL * array, int n)
{
    int i, j, sqrMax;
    for(i = 2; i < n; i++)
    {
        if(i == 2 || i == 3) {array[i] = TRUE; continue;}
        if(i<16) sqrMax = i - 1;
        else     sqrMax = (int)(sqrt(i)); // 浮点数运算比较耗时
        array[i] = TRUE;
        for(j = 2; j <= sqrMax; j++) if(i % j == 0) {array[i] = FALSE; break;}
    }
}
int main()
{
    BOOL * array;
    int i, n;
    scanf("%d", &n);
    array = (BOOL *)malloc(n * sizeof(BOOL));
    prime(array, n);
    for(i = 2; i < n; i++) if(array[i]) printf("%d ", i);
    printf("\n");
    free(array);
    return 0;
}
更多追问追答
追问
哇,貌似可以啊。兄贵,谢谢,我先提交一下,看能不能通过。通过了好评就给你,过不了嘛...也会给你的
追答
过去了没有呀
自游人自由行
2015-05-12
知道答主
回答量:22
采纳率:0%
帮助的人:8.5万
展开全部
直接网上搜求素数C语言代码,或者谭浩强的C语言课本上就有
更多追问追答
追问
如果我能找到的话就不会上这里来问了,你懂的,在百度知道问问题有时候就跟没问一样,根本就没人会回答
追答
void main()
{
int n,i;
scanf("%d",&n);
if(n<2)
printf("%d不是素数\n",n);
else
{
for(i=2;i<=n/2;i++)
if(n%i==0)
{
printf("%d不是素数\n",n);
return;
}
printf("%d是素数\n",n);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式