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

2024年12月01日 12:55
有5个网友回答
网友(1):

#include

#include

#include

#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)

扩展资料:

数组使用规则:

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函数逐个对数组元素赋值。

参考资料:

百度百科-数组

网友(2):

遍历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 
#include 
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;
}

运行结果如下:

网友(3):

#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 printf("%d ",a[n]);
}

网友(4):

// 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]) ;
}
}

网友(5):

a[50] 没有初始化,而且没有记录有多少个素数,建议记录下有多少个,然后打印循环里面设定下结束条件 n < 个数