Day1
题目描述
已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。
输入描述
输入只有一行,包含一个正整数n,6 <n <2109
输出描述
输出只有一行,包含一个正整数p,即较大的那个质数
import math
def largest_prime_factor(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
factor1 = i
factor2 = n // i
if is_prime(factor1) and is_prime(factor2):
return max(factor1, factor2)
def is_prime(num):
if num < 2:
return False
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
return False
return True
Day2
题目描述
给定一个正整数N,请你输出N以内 (不包含N)的质数以及质数的个数。
输入描述
输入一行,包含一个正整数 N。1< N <103
输出描述
共两行。
第1行包含若千个素数,每两个素数之间用一个空格隔开,素数从小到大输出。
第2行包含一个整数,表示N以内质数的个数
可以使用埃氏筛法(Sieve of Eratosthenes)来快速找出N以内的所有质数。
首先,创建一个布尔型数组,大小为N,将所有元素初始化为True。
然后从2开始遍历到N-1,如果当前数字i对应的布尔值为True,则将i的倍数对应的布尔值都设为False。
最后,遍历一遍布尔数组,下标对应的布尔值为True的下标就是质数。
下面是一个示例代码(使用Python语言):
def primes_below_N(N):
is_prime = [True] * N
is_prime[0] = is_prime[1] = False
for i in range(2, N):
if is_prime[i]:
for j in range(i * i, N, i):
is_prime[j] = False
primes = [i for i in range(N) if is_prime[i]]
return primes
N = int(input())
primes = primes_below_N(N)
print(' '.join(map(str, primes)))
print(len(primes))
Day3
题目描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数
输入描述
输入一行三个整数: abn,用空格分开。a 是被除数,是除数,n是所求的小数后位置 (0< a,b,n<109)
输出描述
输出一行3位数字,表示: a除以6,小数后第n位开始的3位数字。
可以使用Python的内置除法运算符/来计算a除以b的结果,
然后将结果转换为字符串并截取小数点后第n位开始的3位数字。
注意,如果结果是有限小数,你需要在末尾补足足够多的0。
下面是一个示例代码(使用Python语言):
a, b, n = map(int, input().split())
result = str(a / b)
if '.' not in result:
result += '.'
decimal_part = result.split('.')[1]
while len(decimal_part) < n + 3:
decimal_part += '0'
print(decimal_part[n - 1:n + 2])
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说: 请在第 1 个棋盘格放 1 粒麦子,在第 2 个棋盘格放 2 粒麦子,在第 3 个棋盘格放 4 粒麦子,在第 4 个棋盘格放 8 粒麦子,…后一格的数字是前一格的两倍,直到放完所有棋盘格 (国际象棋共有 64 格)。 国王以为他只是想要一袋麦子而已,哈哈大笑 当时的条件下无法准确计算,但估算结果令人吃惊: 即使全世界都铺满麦子也不够用! 请你借助计算机准确地计算,到底需要多少粒麦子.
这是一个经典的故事,也是一个数学问题。根据题意,每个棋盘格上的麦子数量是前一个棋盘格的两倍,所以第n个棋盘格上的麦子数量是2(n-1)粒。因此,64个棋盘格上的麦子总数就是20 + 2^1 + 2^2 + … + 263粒。这个和可以用等比数列求和公式计算,结果为264 - 1粒。下面是一个示例代码(使用Python语言):
total = 0
for i in range(64):
total += 2 ** i
print(total)