寻找1000以内的素数
#include<stdio.h>#include<math.h>
int main()
{
int j, i;
_Bool flag;
printf("1k以内的素数有:\n2\n");
for (i=2;i <= 1000;i++)
{
for (j = 2;j <= i/2;j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d\n", i);
}
}
return 0;
}
结果一直不对。。。。。
_Bool函数用不了,我这是vs2019.。。。 _Bool 不是函数,是关键字,是变量的类型
vs 不支持 _Bool,把 _Bool 改成 int 试试
本帖最后由 jackz007 于 2021-8-26 23:12 编辑
#include <stdio.h>
bool prime(int x)
{
bool r = false ;
int i ;
if(x > 1) {
if(x % 2) {
for(r = true , i = 3 ; i * i < x + 1 ; i += 2) {
if(! (x % i)) {
r = false ;
break ;
}
}
} else {
if(x == 2) r = true ;
}
}
return r ;
}
int main(void)
{
int i , k ;
for(i = k = 0 ; i < 1000 ; i ++) {
if(prime(i)) {
if(! (k % 10)) {
if(k) printf("\n") ;
} else {
printf(" ") ;
}
printf("%4d" , i) ;
k ++ ;
}
}
}
使用 gcc 10.2.0 编译器编译、运行实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97101103107109113
127131137139149151157163167173
179181191193197199211223227229
233239241251257263269271277281
283293307311313317331337347349
353359367373379383389397401409
419421431433439443449457461463
467479487491499503509521523541
547557563569571577587593599601
607613617619631641643647653659
661673677683691701709719727733
739743751757761769773787797809
811821823827829839853857859863
877881883887907911919929937941
947953967971977983991997
D:\00.Excise\C> 就这道题而言 flag只要用到1和0两个值int直接用
#include <stdio.h>
int main()
{
int n,i,j,count;
scanf("%d",&n);
for(i=2;i<n;i++)
{
count=0;
for(j=2;j<i/2;j++)
{
if((i%j)==0)
{
count=1;//一旦有一个能除尽的 就是合数了直接跳出
break;
}
}
if(count==0)
printf("%d\n",i);
}
return 0;
} #include <stdbool.h>用 bool试试 YaoShi 发表于 2021-8-26 23:15
就这道题而言 flag只要用到1和0两个值int直接用
我搜了一下标准c没有布尔类型c++有
另外布尔值没什么特殊的 0和1而已 int main()
{
int j, i;
bool flag=1;///初始化赋值为真
printf("1k以内的素数有:\n2\n");
for (i=2;i <= 1000;i++)
{
for (j = 2;j <= i/2;j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d\n", i);
}
flag=1;///做完判断后重新初始化
}
return 0;
} YaoShi 发表于 2021-8-26 23:36
我搜了一下标准c没有布尔类型c++有
另外布尔值没什么特殊的 0和1而已
是0和其他 本帖最后由 超过光速c 于 2021-8-27 09:48 编辑
你的第9行,里面多了一个2, printf("1k以内的素数有:\n2\n");
你的整体代码是没问题的,但是为什么无法打印完所有素数,
在每次对素数的判断循环后,你没有对 flag 进行重制,flag的值一旦被 赋值为 0 了,就一直是0。
所以,建议在第25行,也就是内for循环的每次素数判断循环完成后,对flag进行重制,重制为 1,即 flag = 1;
关于你使用。_Bool flag; 定义布尔类型什么会报错,我认为应该跟你的编辑器的编译器有关。我使用的是 vsCode 使用的 C/C++ v1.6.0 是能正常进行布尔类型定义的。
对你的代码进行修改后:
#include<stdio.h>
#include<math.h>
int main()
{
int j, i;
_Bool flag;
printf("1k以内的素数有:\n"); // 修改位置1
for (i=2;i <= 1000;i++)
{
for (j = 2;j <= i/2;j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d\n", i);
}
flag = 1;// 修改位置2
}
return 0;
}
页:
[1]