xiecheng
1.给定两个正整数x和p,要求从x中提取出所有的奇数位数字组成一个新数,然后将这个新数对p取模,并输出结果。
输入描述
-
第一行输入正整数x,代表待处理的数字。
-
第二行输入正整数p,代表用于取模的数。
输出描述
输出一个整数,代表新数对p取模的结果。
输入
12332
12
输出
1
说明
-
从12332中提取出奇数位数字组成新数133。
-
133 % 12 = 1
def solve(x, p):
# 提取奇数位数字组成新数
odd = [digit for digit in str(x) if int(digit) % 2 != 0]
if not odd:
new_number = 0
else:
new_number = int(''.join(odd))
# 计算新数对p取模的结果
result = new_number % p
return result
# 读取输入
x = int(input().strip())
p = int(input().strip())
# 计算并输出结果
print(solve(x, p))
#include <iostream>
#include <vector>
using namespace std;
int main(){
int x,p;
cin>>x>>p;
int a;
vector<int> v;
while(x){
a = x % 10;
if(a%2!=0){
v.push_back(a);
}
x = x/10;
}
int m = 0;
for(int i = v.size()-1;i>0;i--){
m = m*10+v[i];
}
cout<<m%p<<endl;
}
2.给定一个正整数,要求通过重排这个整数的所有位数,使其成为一个素数。如果无解,请输出-1。否则输出任意一个合法解,代表重排后的素数。
输入描述
输入一个正整数,代表待重排的正整数。
输出描述
如果无解,请输出-1。 否则输出任意一个合法解,代表重排后的素数。
示例
示例 1
输入
310
输出
103
说明
-
不能输出13(013),因为包含了前导零。
-
不能输出301,因为301=7*43,不是素数。
思路:
注意0不能放首位,使用回溯算法,单独写一个函数判断是否为素数,流程图如下
from itertools import permutations
#生成所有可能的数字排列
def is_prime(n):
if n < 2:
return False
i = 2
while i <= n // i:
if n % i == 0:
return False
i += 1
return True
def solve(a):
for perm in permutations(a):
if perm[0] != '0':
n = int(''.join(perm))
if is_prime(n):
print(n)
return
print(-1)
a = list(input().strip())
solve(a)