某天,诺诺看到三七二十一(3721)数,觉得很神奇,这种数除以3余2,而除以7则余1。例如8是一个3721数,因为8除以3余2,8除以7余1。现在给出两个整数a、b,求区间[a,b]中的所有3721数,若区间内不存在3721数则输出“none”。 输入格式: 首先输入一个正整数t,表示测试数据的组数,然后是t组测试数据。每组测试输入两个整数a,b(1≤a<b<2000)。 输出格式: 对于每组测试,在一行上输出区间[a,b]中所有的3721数,每两个数据之间留一个空格。如果给定区间不存3721数,则输出“none”(引号不必输出)。
时间: 2023-05-31 12:19:09 浏览: 205
### 回答1:
题目描述:某天,诺诺看到三七二一(3721)数,觉得很神奇。这种数除以3余2,而除以5余1。例如,第8个是一个3721数,因为8÷3=2余2,8÷5=1余3,这种数除以7余1,而除以11余7。现在给出两个整数a、b,求区间[a,b]中的所有3721数,若区间内不存在3721数则输出“none”。
输入格式: 首先输入一个正整数t,表示测试数据的组数。 接着输入t行数据,每行输入一个正整数t和整数a、b,表示第t组测试数据的整数范围是[a,b]。
输出格式: 对于每一组测试数据,输出每个整数区间[a,b]中的所有3721数,每两个数据之间留一个空格。如果没有3721数,输出“none”。
输入样例:
2
10 1 20
8 100 300
输出样例:
11 17
none
### 回答2:
题目分析:
3721数的特征是除以3余2,除以7余1。因此我们可以用循环遍历给定的区间[a, b],检查每个数是否符合这个特征。
具体实现:
我们可以用一个for循环遍历[a, b]中的所有整数,对于每个数n,检查它是否除以3余2且除以7余1。如果是,就输出这个数。如果遍历完整个区间后没有符合条件的数,就输出"none"。
具体代码如下:
### 回答3:
对于每个数,其满足除以3余2,除以7余1的条件,则可以表示为:
n = 3x + 2 且 n = 7y + 1
将上述两个式子联立起来,得到
3x + 2 = 7y + 1
移项得到
3x - 7y = -1
根据扩展欧几里得算法,我们可以求出该方程的一组解(x0,y0),然后用往后依次加7取得所有的解。如果x' > b,则停止计算。
算法过程如下:
1. 定义一个列表,用于存储所有符合条件的数。
2. 扩展欧几里得算法求解3x - 7y = -1的一组解(x0,y0),其中y0为负数,保证x>=0.
3. 将x0加上7的倍数,直到x'>b停止。
4. 输出所有符合条件的数,如果列表为空,输出"none"。
注意点:
1. 对于每组测试数据都要重新定义列表,并在一组测试数据输出完后清空列表。
2. 扩展欧几里得算法求解的过程中,应该将x mod 7 = 2和y mod 3 = 1的情况直接跳过。因为这样的情况会导致得到的数不在[a,b]之间。
代码如下:
阅读全文