解题思路:1.当时竟然还想排除输入一以内的,然后怕过不去就没输入(zz行为)。

              2.首先是了解质数(素数)的性质,即只能被一和自身整除(*扩展如果还能被其他数整除,那叫合数)。

              3.初步思路打算用两个for循环,大循环是给数(自己输入的范围中的每个数),其次数另一for循环直接判断是否为素数。

              4.然后是解决如何判断素数,这里我也没啥可厉害的法子,然后就定义了一个标志位,并定义其初始值为一(要是定义0的话要拐个弯),在判断素数的过 程中(俺用的是求余),有余数即进入if语句中并定义flag=0(意思是这个数不是素数了),也正是因为判断有结果了,所以应该用break跳出判断,节省时间(你说有啥浪费时间的,是吧,哈哈) 。                                   

/--
注意事项:1.标志位记得要重置,不然只会出2。

              2.printf要放在最外面的循环(就我一个人犯这个错误了,那就当我没说)。

/--
参考代码:

#include int main(void)
{
    int data,i,x,flag=1;
    scanf("%d",&data);
    for(x=2;x<=data;x++)
    {		
	for(i=2;i<x;i++)
	{
	    if((x%i)==0)//如果能除尽,那说明为合数 
	    {
	        flag=0;
	        break;
            }
	}
	if(flag==1)
	{
	    printf("%d\n",x);			
	}
	    flag=1; 
    }
return 0;		
}


点赞(0)
 

0.0分

16 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 16 条评论

归零 1年前 回复TA
@归零 没事了,我是zz
归零 1年前 回复TA
为什么我的结果是对的,提交后是零分啊?
#include<stdio.h>
int main()
{
    int n, N;
    scanf("%d", &N);
    int i;
    for (n = 2; n <= N; n++)
    {
        for (i = 2; i < N; i++)
        {
            if (n % i == 0)
            {
                break;
            }
            if (n % i != 0)
            {
                printf("%d\n", n);
                break;
            }
        }
    }
    return 0;
}
zhangzy 2年前 回复TA
@zhangzy 哦哦,一语中的,学会了,谢谢
徐天育 2年前 回复TA
@zhangzy 如果输入的数是合数的话flag会由1变为0,素数的话flag就一直是一,最后利用flag来判断是否为素数。
zhangzy 2年前 回复TA
改进了缩进,还是看不懂
#include int main(void)
{
    int data,i,x,flag=1;
    scanf("%d",&data);
    for(x=2;x<=data;x++){  
        for(i=2;i<x;i++){
            if((x%i)==0){//如果能除尽,那说明为合数 
            flag=0;
            break;
            }
        }
        if(flag==1){
        printf("%d\n",x);          
        }
    flag=1; 
    }
return 0;     
}
程序垃圾 2年前 回复TA
@qiaot 第二个for循环主要是用来判断是否能被除尽,能flag=0,如果放在第二个for循环里,flag=1,一直满足条件(初值已经定义了flag=1),就会一直输出判断的数。
DariaAlice 2年前 回复TA
这缩进看着眼珠子疼……
qiaot 3年前 回复TA
为什么第二个if语句不在第二个for循环里面包括着呀?
Wasser007 3年前 回复TA
int judge(int m) {
	for (int j = 2; j * j <= m; j++) {
		if (m % j == 0) {
			return 0;
		}
	}
	return 1;
}

int main() {
	int n;
	scanf_s("%d", &n);

	for (int m = 1; m < n; m++) {
		if (judge(m) == 1) {
			printf("%d\n", m);
		}
	}

	return 0;
}
kinkin 3年前 回复TA
@tqtql #include <stdio.h> #include <stdlib.h>  int main() {    int n,j,sum=0;    scanf("%d",&n);    for(int i=2;i<=n;i++)    {        sum=0;        for(j=2;j<=i;j++)        {            if(i%j==0)              break;              sum++;         }         if(sum>=i-2)             printf("%d
",j);    } }