解题思路:
符合该种质数的一位的质数为2, 3, 5, 7;而两位的质数为2x, 3x, 5x, 7x....

可以发现多一位位数即在前面是质数的基础上 * 10 再 加上 一个数,这个数很明显不能是偶数,因为除2外所有的偶数都不是质数。

所以我们就可以得到一个递推的式子: m = x * 10 + i,如果是质数则进入下一次:n = m * 10 + i;使用地推时需要注意的是出口,此时出口很明显是满足到要求的数字位数时即停止,同时输出该位数的数字,即可得结果。 


注意事项:
使用递推时要注意出口。

参考代码:

//1544: 质数肋骨 

#include <stdio.h>
#include <math.h>
int count = 0; 

//判断是否为质数 
int judge( int n )
{
	int i, j;
	
	for( i = 2 ; i <= sqrt(n) ; i ++ )
	{
		if( n % i == 0)
			return 0;
	}
	return n;
}

//判断是否达到要求的位数
//n 是第一位的数字,c 是位数 
int a10(int n, int c)
{
	int i, num;
	
//	在最后一次时,多执行了一次count--,所以选择将count+1或c-1 
	if( count == c - 1 )
	{
		printf("%d\n", n);
		return 0;
	}
	for( i = 1; i < 10 ; i++ )
	{
		num = n * 10 + i;
		if( judge(num) != 0 )
		{
			count ++;
			a10(num, c);
			count --;
		}
	}
}

int main()
{
	int n, i = 0, j, num = 1, end, ans[8], flag = 0, t;
	
	scanf("%d", &n);

//	1位数的质数2, 3, 5, 7.
//	所以输出必定以这4位数字开头,即最高位。
	
	 
	a10(2, n);
	a10(3, n);
	a10(5, n);
	a10(7, n);
	
	return 0;
	
}


点赞(1)
 

0.0分

8 人评分

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

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

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

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

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

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

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

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

评论列表 共有 2 条评论

dotcpp0640405 1年前 回复TA
@uq_31601216222 没问题的
uq_31601216222 2年前 回复TA
为什么要sqrt(n)呐,如果i<9三位数会出错,但是二位数以下的不会,不懂