关于素数问题

上一篇 / 下一篇  2008-08-05 14:34:02 / 个人分类:study

面朝大海,春暖花開......

 

1.   /*题目:判断101-200之间有多少个素数,并输出所有素数.

     判断素数的方法:用一个数分别去除2sqrt(这个数)

     如果能被整除,则表明此数不是素数,反之是素数.*/

 

a.

#include<stdio.h>

#include"math.h"

void main()

{

       int m,i,h=0,leap=1;

       for(m=101;m<=200;m++)

       {

              for(i=2;i<=sqrt(m);i++)

              {

                     if(m%i==0)

                     {

                            leap=0;

                            break;

                     }     

                     else

                            leap=1;

              }

              if(leap)

              {

                     printf(" %d ",m);

                     h++;

                     if(h%10==0)

                            printf("\n");

              }

       }

       printf("\n%3d\n",h);

}

 

b.       代码略有改动:

 

 

#include<stdio.h>

#include"math.h"

void main()

{

       int m,i,h=0,leap=1;

       for(m=101;m<=200;m+=2)// 改动的地方.(只计算奇数)

       {

              for(i=2;i<=sqrt(m);i++)

              {

                     if(m%i==0)

                     {

                            leap=0;

                            break;

                     }     

                     else

                            leap=1;

              }

              if(leap)

              {

                     printf(" %d ",m);

                     h++;

                     if(h%10==0)

                            printf("\n");

              }

       }

       printf("\nh=%3d\n",h);

}

 

 a, b 的结果都是:

 

101 103 107 109 113 127 137 139 149

 

151 157 163 167 173 179 181 191 197

 

199

 

h=21

 

 

 

2.         函数fun 的功能是将一个大偶数a(a>=6) 分解成两个素数之和的形式. 例如: 64.

 

64=3+61

64=5+59

64=11+53

64=17+47

64=23+41

组数为:5

 

#include<stdio.h>

#include<math.h

void fun(int a)

{

       int k,m1,m2;

       int n=0;

       for(m1=3;m1<=a/2;m1=m1+2)

       {

              for(k=2;k<=sqrt(m1);k++)

                     if(m1%k==0)

                            break;

                     if(k>sqrt(m1))

                            m2=a-m1;//(此处为填空部分

                     else continue;//改了这个地方.我想大概就是这儿的问题.

                     for(k=2;k<=sqrt(m2);k++)

                            if(m2%k==0)

                                   break; //(此处为填空部分

                            if(k>sqrt(m2))

                            {

                                   printf("%d=%d+%d\n",a,m1,m2);

                                   n++;

                            }     

       }

              printf("组数为:%d\n",n);

      

}

void main()

{

       int a;

       scanf("%d",&a);

       fun(a);

}

 

 


TAG: study

 

评分:0

我来说两句

Open Toolbar