关于素数问题
上一篇 /
下一篇 2008-08-05 14:34:02
/ 个人分类:study
1. /*题目:判断101-200之间有多少个素数,并输出所有素数.
判断素数的方法:用一个数分别去除2到sqrt(这个数),
如果能被整除,则表明此数不是素数,反之是素数.*/
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