用C语言把2-100之内的素数放到数组里,并且输出来。

#include"stdio.h"#include"math.h"main(){inti,j,k,m=0,n,a[50];for(i=2;i<=100;i++){j=sq... #include"stdio.h"
#include"math.h"
main()
{
int i,j,k,m=0,n,a[50];
for(i=2;i<=100;i++)
{
j=sqrt(i);
for(k=2;k<=j;k++)
if(i%k==0)break;
if(k>j)
a[m]=i;
}
for(n=0;n<50;n++)
printf("%d ",a[n]);
}
我要跪了....运行的时候输出来是一大串数字....
展开
 我来答
iiiiiiiipl
2019-05-24 · TA获得超过9923个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.8万
展开全部

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define n 100

int main()

{

int a[n+1]={0};

int i,j;

for(i=2;i<=sqrt(n);i++){

if(a[i]==0){

for(j=2*i;j<=n;j+=i){

a[j]=1;

}

}

}

for(i=2;i<=n;i++){

if(a[i]==0)

printf("%d ",i);

}

return 0;

}

输出100以内的素数,思路:

假如自然数N不是素数,则除1和其本身之外,必然至少存在两个数A和B,使得A*B=N,则A和B中必有一个大于或者等于sqrt(N),另一个小于或者等于sqrt(N)。下面是粗略证明如果N是合数,则必有一个小于或者等于根号N的素因子.因为任何合数都可表示为两个或者更多个素数之积。

假如N是合数且其素因子都大于根号N,那么将产生矛盾:根号N*根号N>N。所以合数必有(至少)一个不大于根号N的素因子。

n的不大于根号的因子<=sqrt(n);n-1的不大于根号的因子<=sqrt(n-1),显然sqrt(n-1)<sqrt(n);所以2~n内的自然数的因子范围是2~sqrt(n);换句话说2~sqrt(n)的倍数覆盖了了2~n范围内的合数。

扩展资料:

数组使用规则:

1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

参考资料:

百度百科-数组

风若远去何人留
2017-06-16 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部

遍历2到100之间所有整数,然后逐一判断是否为素数,如果是则存入数组。

最终遍历数组输出每个值即可。 具体如下:


1、素数的判断。 

根据素数定义,除了1和本身不存在其它约数的正整数为素数。

所以在C语言中判断n是否为素数可以从2开始到到n-1逐一尝试,如果可以整除说明不是素数。

更进一步,可以从2判断到n/2或者n的算术平方根,如果不存在约数,那么即为素数。

除此以外,判断素数的算法还有素数筛等。

2、判断素数的函数:

以遍历判断约数的方法为例,函数可以编写如下:

int isPrime(int n)//判断n是否为素数,如果是则返回1,否则返回0.
{
    int i;
    for(i = 2; i <= (int)sqrt(n); i ++)//从2到算术平方根遍历。
        if(n%i == 0) return 0;//存在约数,不是素数,返回0.
    return 1;//不存在约数,返回1,表示为素数。
}

3、整体代码示例:

#include <stdio.h>
#include <math.h>
int isPrime(int n)//之前的函数。
{
    int i;
    for(i = 2; i <= (int)sqrt(n); i ++)
        if(n%i == 0) return 0;
    return 1;
}
int main()
{
    int n;
    int a[100];
    int cnt=0;

    for(n = 2;n<=100; n ++)//遍历2到100所有整数。
        if(isPrime(n)) //判断是素数
            a[cnt++] = n;//存入数组。
    for(n = 0; n < cnt; n ++)//遍历存放素数的数组。
        printf("%d ", a[n]);//输出。
    printf("\n");
    
    return 0;
}

运行结果如下:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帮个忙好不
推荐于2017-10-05 · TA获得超过451个赞
知道小有建树答主
回答量:672
采纳率:0%
帮助的人:384万
展开全部
#include"stdio.h"
#include"math.h"
main()
{
int i,j,k,m=0,n,a[50];
for(i=2;i<=100;i++)
{
j=sqrt(i);
for(k=2;k<=j;k++)
if(i%k==0)break;
if(k>j)
a[m++]=i;
}

for(n=0;n<m;n++)
printf("%d ",a[n]);
}
追问
非常感谢,能解释一下吗 我之前的程序不是素数的时候就会出现一大串数字,
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户15954
2013-05-31 · 超过10用户采纳过TA的回答
知道答主
回答量:19
采纳率:0%
帮助的人:17.7万
展开全部
// oper.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void main()
{
int a[100] ;
int i ,j ,z,m=0;
for (i=2 ; i<=200 ; i++)
{
for(j=2 ; j<= i ; j++)
{
if (i ==2)
{a[m]=i ; m++ ; break ;}
else
{
if(i%j==0)
{
if(i==j){a[m]=i ; m++ ; break ;}
else {break;}
}
else {continue ;}
}
}
}

for (z = 0 ;z<= m-1 ;z++)
{
printf("%d\n" ,a[z]) ;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiahanvy
2013-05-31 · TA获得超过342个赞
知道小有建树答主
回答量:462
采纳率:0%
帮助的人:351万
展开全部
a[50] 没有初始化,而且没有记录有多少个素数,建议记录下有多少个,然后打印循环里面设定下结束条件 n < 个数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式