每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
在一行上输入一个正整数
。
除此之外,保证单个测试文件的
之和小于
。
对于每一组测试数据,新起一行。如果不存在满足条件的正整数,直接输出
;否则,输出一个正整数,代表答案。
如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
2 1 11
2 14
对于第一组测试数据,我们需要在
区间内找到一个正整数,满足该正整数所有数位之和为一个质数。其中,
的数位之和为
,
的数位之和为
,
既不属于合数、也不是质数;所以
是唯一答案。
对于第二组测试数据,
的数位之和为
,符合条件。注意答案不唯一。
题目描述是找到 [x, 2x] 范围内 满足所有数位和 为质数,X数据大到10w位,直接查肯定不行
需要转换一下思路,因为要求只要1个结果,自己构造肯定是怎么方便怎么来
所以只需要考虑答案的前1~2位,后面全部补0,这样就是最简单的办法
现在来确定一下范围就行,
当X = 1.ddd × 10n ,[ x, 2x] 范围就是 [1.ddd × 10n , 2(or3).ddd × 10n], 那么2 × 10n 肯定是在这个范围内的
以此类推,X = 2.ddd × 10n 时,3 × 10n 在目标范围内...这样一直推到9就好
有了这样的结论就可以下手了
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector<int> table = {-1, 2, 3, 5, 5, 7, 7, 11, 11, 11};
int main() {
int cnt;
while (cin >> cnt) {
string s;
while(cnt-- > 0){
cin >> s;
int len = s.size();
cout << table[s[0] - '0'] << string(len - 1, '0') << endl;
}
}
} T = int(input()) # 自己构造质数 for _ in range(T): x = input() k = len(x) if x[0]=='1': result = '2'+ '0'*(k-1) elif x[0]=='2': result = '3' + '0'*(k-1) elif x[0]=='3': result = '5' + '0'*(k-1) elif x[0]=='4': result = '7' + '0'*(k-1) elif x[0]=='5': result = '7' + '0'*(k-1) elif x[0]=='6': result = '7' + '0'*(k-1) elif x[0]=='7': result = '11' + '0'*(k-1) elif x[0]=='8': result = '11' + '0'*(k-1) elif x[0]=='9': result = '11' + '0'*(k-1) print(result)
import math def is_sushu(a): if a ==1: return False if a ==2: return True up_jie = math.sqrt(a) i = 2 while i <= up_jie: if a % i == 0: return False i += 1 return True n = int(input()) for i in range(n): k = int(input()) for t in range(k,2*k+1): sum_wei = 0 temp = list(str(t)) for char in temp: sum_wei += int(char) if is_sushu(sum_wei): print(t) break #一个例子超时了,草