n,q=map(int,input().split()) library=[int(input()) for _ inrange(n)] #和下面代码是一个意思: # for _ in range(n): # library.append(int(input())) needed=[tuple(map(int,input().split())) for _ inrange(q)] #和下面代码是一个意思: # for _ in range(q): # needed.append(tuple(map(int,input().split()))) #test: # print(library) # print(needed) library.sort() deffind(tupleX): for i in library: a=-tupleX[0] ifstr(i)[a:]==str(tupleX[1]): return i return -1 for i in needed: print(find(i))
#include<iostream> usingnamespace std; intgcd(int a, int b) { if (a % b==0) return b; elsereturngcd(b, a % b); } int x, y; intmain(){ cin >> x >> y; cout << gcd(x, y); return0; }
Sieve of Eratosthenes(埃拉托斯特尼筛法)是一种古老且有效的算法,用于找出一定范围内所有的质数。这个名字来源于古希腊的数学家埃拉托斯特尼,他在公元前3世纪提出了这个算法。 埃拉托斯特尼筛法的基本思想是从最小的质数开始,逐步筛选掉其倍数,剩下的就是质数。以下是该算法的步骤:
创建一个列表,包含从2开始到你想找到的最大数 $ n $ 的所有整数。
选择列表中的第一个数(它是2,是唯一的偶数质数),然后将其所有的倍数(除了它自己)标记为非质数。
找到列表中的下一个未被标记的数,它是下一个质数,然后重复步骤2,将其所有的倍数标记为非质数。
继续这个过程,直到你到达列表的末尾。
在这个过程中未被标记的数就是质数。 以下是埃拉托斯特尼筛法的伪代码示例:
1 2 3 4 5 6 7 8 9 10 11
function SieveOfEratosthenes(n) create a list "prime[0..n]" and initialize all entries as true. A value in prime[i] will finally be false if i is Not a prime, else true bool prime[n+1]; memset(prime, true, sizeof(prime)); for p = 2 to sqrt(n) if prime[p] is true for i = p*p to n step p prime[i] = false for p = 2 to n if prime[p] is true print p
def sieve_of_eratosthenes(n): # 初始化一个布尔数组,所有的值都设为True prime = [True for _ in range(n+1)] p = 2 while (p * p <= n): # 如果prime[p]没有被改变,那么它是一个质数 if prime[p] == True: # 更新所有p的倍数为非质数 for i in range(p * p, n+1, p): prime[i] = False p += 1
# 收集所有质数 primes = [] for p in range(2, n): if prime[p]: primes.append(p) return primes