用c语言编写程序输出1-100内的素数

如题所述

用常规的判素性方法可如下实现
#include "stdio.h"
#include "math.h"
bool IsPrime(int x)
{
int i, s;
s = sqrt(x + 1);
for(i = 2; i <= s; i++)
if(x % i == 0) return false;
return true;
}
void main( )
{
int i;
for(i = 2; i < 100; i++)
if(IsPrime(i))
printf("%d ", i);
}
也可采用筛选法,筛选法效率会高一些,楼上的虽然也是筛选法,但他的效率却并不高。筛选法的思路是将那些非素数筛掉,留下那些素数。命题“对于1<x<100的合数x, 必含有小于10的质因子”可以证明是真命题,它的逆反命题“对于1<x<100的数,如果不含有小于10的质因子,则它必为素数。”则也是真命题。因此筛除时,只要筛除含有10以内的质因子的数就可以了。下面给出筛选法的代码。
#include "stdio.h"
void main( )
{
bool isprime[100];
int i, j;
isprime[0] = false;
isprime[1] = false;
for(i = 2; i < 100; i++) /*先初始化2~100的都是素数,然后将非素数筛除掉*/
isprime[i] = true;
for(i = 2; i < 10; i++) /*将所有含有小于10的质因子的数筛除掉*/
{
if(isprime[i]) /*如果i是素数,则将它的倍数全部筛掉*/
for(j = i * i; j < 100; j += i) /*从i*i开始检测是因为小于i*i的合数都被小于i的素数筛除了*/
isprime[j] = false;
}
for(i = 2; i < 100; i++)
if(isprime[i])
printf("%d ", i);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-17
#include <stdio.h>

void main()
{
    int i = 0;
    int j = 0;
    for (i = 2; i <= 100; i++)
    {
        for (j = 2; j * j <= i; j++)
        {
            if (0 == i % j)
                break;
        }

        if (j * j > i)
            printf("%d\n", i);
    }
    return;
}

第2个回答  2013-12-17
//求100以内的素数,
//质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
#include <stdio.h>
#include <math.h>
int main(void)
{
 int i,j,a[101];
 for(i=0;i<=99;i++)
  a[i]=i+1;
  a[0]=0;          //将1挖掉       
 for(i=1;i<sqrt(100);i++)     //将2,3,4,5,6,7,8,9的倍数挖掉
  for(j=i+1;j<=100;j++) 
  {
   if(a[i]!=0 && a[j]!=0) //寻找没有被挖空的数组
   if(a[j]%a[i]==0)      //将a[i]的倍数挖掉
   a[j]=0;    
  }
 
  
 for(i=1,j=0;i<101;i++)
 {
  if(a[i]!=0)
  {
   printf("%-2d ",a[i]);
   j++;     //记录输出的数据
  }
  if(j==10)     //控制输出10 个数据就换行
  {
   printf("\n");
   j=0; 
  }
  
 }
 
 return 0;
}
~~~~~~~~~~~~~~~~~~~
说实话楼上的代码,没注释我看不太懂

相似回答