在计蒜客学习时被一道练习题卡住了,做不出来就不能学习后面的内容,大家帮帮我,贡献下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
样例输出改成样例输入 展开
小度机器人最近正在添加功能,Robin希望小度机器人可以告诉他从1到N( 1 < N <= 10000)有多少个素数。请你来帮帮他吧?
输入包括一行,仅一个数字N。
输出在(1, N]区间内的所有的素数。
提示:想像将(1, N]的数字看成沙子和小石头,视非素数为沙子,视素数为小石头。将沙子筛走,剩下的就是小石头了。考虑到N最大也就是10000,你可以开一个长度为10000的数组,让数组元素的值作为筛去与否的标志,比如筛去以后让元素值为1,然后依次输出就可以了。当然,如果你有更好的办法,也可以试试哦!
样例输出:8
结果: 2 3 5 7
样例输出改成样例输入 展开
展开全部
#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;
}
更多追问追答
追问
哇,貌似可以啊。兄贵,谢谢,我先提交一下,看能不能通过。通过了好评就给你,过不了嘛...也会给你的
追答
过去了没有呀
展开全部
直接网上搜求素数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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询