#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到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;
}
运行结果如下:
#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
}
// 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]) ;
}
}
a[50] 没有初始化,而且没有记录有多少个素数,建议记录下有多少个,然后打印循环里面设定下结束条件 n < 个数