摘要:
注意到两个素数之间是肯定不可以相互生成的,所以如果数组中包含两个及以上的素数时,x就不存在。而当数组中不包含素数时,2就是一个满足条件的数,因为任意偶数都可以由若干个二相加得到,而奇数肯定存在一个奇数因子(因为前提条件是都是合数),这个奇数减掉这个因子就变成了偶数,可以由2生成。当数组中有且仅有一个 阅读全文
摘要:
题目可以转换成求哪个数的因数出现次数最多,并输出这些因数的位置,所以也可以用埃氏筛的思想,这样可以避免重复计算。用一个数组sum[]来记录总次数,index就是具体的那个数,因为m<=1e6,所以数组是可以开出来的,每遇到一个数,就把sum中index为这个数的倍数的位置都++,因为一个数肯定是它倍 阅读全文
摘要:
根据题意,数对交换位置算不同数对,所以只要考虑p<=q就行了,交换一下就是结果乘二,但要注意当p=q时要减掉一。最小公倍数可以用pq==xy来代替,最大公约数就是gcd(p,q); `#include<stdio.h> include include include<stdlib.h> includ 阅读全文
摘要:
正常暴力就是每个数判断是否为素数,但这样会超时,所以要用埃氏筛,因为每一个数都可以唯一拆解为若干个素数乘积,所以只要r^0.5以内的素数都求出来,然后在[l,r]区间内把合数筛掉,剩下的都是素数了 `#include<stdio.h> include include include<stdlib.h 阅读全文
摘要:
显然,相邻的两个数是互质的,但题目只定义[1,1]为一个区间,所以1要单独判断 `#include<stdio.h> include include include<stdlib.h> include<string.h> include include<bits/stdc++.h> using na 阅读全文
摘要:
首先a,b,d的范围大的离谱,显然不能直接读入,所以一边读入一边取模,然后注意到19260817是一个素数,显然可以用费马小定理,a^(p-1)=1(mod p).但我这里的代码是取模的线性替换 `#include<stdio.h> include include include<stdlib.h> 阅读全文