作业探讨
题目:求出100到200以内最大的素数和最小的素数,并求出两者的差值。下面是我写的代码
#include <stdio.h>
int main()
{
int i,j,m,a,b;
for(i=100;i<200;i++)
{
m=1;
for(j=2;j<i;j++)
if(i%j==0)m=0;
if(m)
{
a=i;printf("最小的素数是%d",a);break;
}
}
for(i=200;i>=100;i--)
{
m=1;
for(j=2;j<i;j++)
if(i%j==0)m=0;
if(m)
{
b=i;printf("\n最大的素数是%d",b);break;
}
}
printf("\n差等于:%d",b-a);
return 0;
}
我在想能不能把两个判断合并在一起,可是我不会,有没有知道的铁子分享一下? {:9_220:}不要沉铁啊 这是我的程序:
#include <stdio.h>
void main()
{
int i, j, k = 0, max, min;
for (i = 100;i < 200;i++)
{
for (j = 2;j < 200;j++)
{
if (i % j == 0)
break;
}
if (i == j)
{
if (k == 0)
{
min = i; // 第一个素数,必定是最小的
k++;
}
else
max = i; // 这个最大值是不断地刷新的
}
}
printf("100 ~ 200 区间内最小的素数是 %d, ", min);
printf("最大素数是:%d, 两者的差是 %d", max,max - min);
printf("\n");
} 本帖最后由 jackz007 于 2020-11-29 15:25 编辑
#include <stdio.h>
int prime(const int n)
{
int k , r = 0 ;
if(n > 1) {
if(!(n % 2)) {
if(n == 2) r = 1 ;
} else {
for(r = 1 , k = 3 ; k * k < n + 1 ; k += 2) {
if(k < n && ! (n % k)) {
r = 0 ;
break ;
}
}
}
}
return r ;
}
int main()
{
int c , k , min , max ;
for(c = 0 , k = 100 ; k < 201 ; k ++) {
if(prime(k)) {
if(! c) min = k ;
else max = k ;
c ++ ;
}
}
printf("最小的素数是%d\n" , min) ;
printf("最大、最小素数的差是:%d\n" , max - min) ;
} 你这代码在我编译器上报错了,我也不知道哪里错了,它在10行报错 你的程序没有错误!,你所问的两个判断合并,我得先到你思维方式上,再想想 jackz007 发表于 2020-11-29 15:23
你这代码在我编译器上报错了,我也不知道哪里错了,它在10行报错 风过无痕1989 发表于 2020-11-29 15:22
这是我的程序:
{:10_254:}感谢帮助 头发掉光了没 发表于 2020-11-29 15:30
你这代码在我编译器上报错了,我也不知道哪里错了,它在10行报错
编译器报出的错误信息是什么? 我想明白了你的意思,先从小值端求得一个素数,然后让程序中断,再从大值端求得一个素数,然后让程序中断,从而得到最小值与最大值。但是,你只是中断了内循环 j,i 的循环并没有中断,所以,你还得在 i 的循环层内,再加一个 break,不然,你的程序运行时间将是我的程序运行时间的两倍。
两个判断是没法合并的!因为,它们判断的基础是不一样的:第一个判断是否取得素数,取得了素数,便使 m = 0,而第二个判断,正是在 m 是否为 0 的基础上进行的 风过无痕1989 发表于 2020-11-29 15:44
我想明白了你的意思,先从小值端求得一个素数,然后让程序中断,再从大值端求得一个素数,然后让程序中断, ...
原来如此{:10_297:} jackz007 发表于 2020-11-29 15:41
编译器报出的错误信息是什么?
现在又没有错误了,先前可能是我复制代码的时候弄漏了,抱歉哈{:10_278:}
页:
[1]