A - Bi-shoe and Phi-shoe(欧拉函数的性质)
题意
给出一些数字,对于每个数字找到一个欧拉函数值大于等于这个数的数,求找到的所有数的最小和。
思路
考察了欧拉函数的简单性质,即满足欧拉函数(k)>=N的最小数为N+1之后的第一个素数
1 |
|
C - Aladdin and the Flying Carpet(唯一分解定理)
题意
给一对数字 a,b ,a是一个长方形的面积,问有多少种整数的边的组合可以组成面积为a的长方形,要求最短的边不得小于b
思路
唯一分解定理
1 |
|
D - Sigma Function (平方数和平方数×2的约数和是奇数 )
题意
求1-n中的因子和为偶数的个数是多少
思路
平方数和平方数*2的约数和是奇数
而且——-平方数*2的个数就等于sqrt(n/2)
1 |
|
E - Leading and Trailing(求 n^k 前3项和后3项)
思路
后三项不需要想就知道是快速幂了
但是前三项需要推一下
我们知道任意数可以转化成 X = 10^( x + y ) (x为整数,y为小数)
其中 10^x 来控制的是源数字 10 100.。。这样的东西,而具体这个数字等于多少,全靠10^y ,
那么 我们就可知道 10^y 就是我们要求的前n个数字还不会炸 long long (用double的话末尾消去,很适合)
这样我们就能保证前7位可知, 如果要前三位 只需要 10^(y) * 100 就好了。
由于这道题数据卡的不是太死。。限时 2s ,那么不用快速幂去搞前三位。。似乎没事。
fmod 是一个特殊函数 fmod(a,b) (a , b 为 浮点型) 得出的结果是 a / b 得出的结果的小数。。
距离 fmod( 4, 3 ) 结果为 0.3333333 ,那么我们这样 fmod( x , 1 ) 就是默认取他的小数点位
那么 对于 X^k = 10^x * 10^y
x + y = k lg X ,那么 y = fmod( klg X, 1.0 )
然后再*100就是前三位了。。。
1 |
|
F - Goldbach`s Conjecture (线性筛)
题意
T组询问,每组询问是一个偶数n
验证哥德巴赫猜想
回答n=a+b
且a,b(a<=b)是质数的方案个数
思路
注意不要被卡内存就行
1 |
|
G - Harmonic Number (II)(整除分块)
题意
求f(n)=n/1+n/2…..n/n,其中n/i保留整数;
思路
直接套莫比乌斯反演的整除分块
1 |
|
H - Pairs Forming LCM (唯一分解定理)
题意
求有多少组 ( i,j )
使 lcm(i, j) = n and (i ≤ j).
(1 ≤ n ≤ 10^14)
思路
1 |
|
I - Harmonic Number (欧拉常数 /稀疏打表求调和级数)
题意
t组数据,每组一个n 求 1+1/2+1/3+1/4 ……+1/n的和
思路
直接100个一组打表求前1e7项
或者直接套公式
r=0.57721566490153286060651209(r就是欧拉常数)。
1 |
|
J - Mysterious Bacteria (唯一分解定理,有符号整数只有31位,负数指数只能是奇数)
题意
给你一个整数n(可能为负数),让你求满足a^p=n的最大的p
思路
当n是正数时,直接对n进行素因子分解,在对它的素因子的个数进行gcd,比如12=2^2*3,gcd(2,1)就是最大的p;
当n是负数时,则p的值一定是奇数,因为一个数的偶数次方一定为整数,因此需要将它的素因子个数全都化为奇数。
1 |
|
K - Large Division (同余模定理)
题意
给你一个大数A问你是否可以被一个b整除
思路
直接同余模
1 |
|
L - Fantasy of a Summation(快速幂)
1 |
|
M - Help Hanzo (大区间素数筛选)
题意
给出T个实例,T<=200,给出[a,b]区间,问这个区间里面有多少个素数?(1 ≤ a ≤ b < 231, b - a ≤ 100000)
思路
首先先把筛素数改成筛非素数
然后先用sqrt(b)里面的素数去筛a-b之间的非素数 剩下的就都是素数了
1 |
|
N - Trailing Zeroes (III) (二分)
题意
N!后面有Q个0,给你Q,求N
思路
1 |
|
O - GCD - Extreme (II) (欧拉函数的应用)
题意
求sum(gcd(i,j),1<=i<j<=n)1<n<4000000
1 |
|
R - 青蛙的约会 (exgcd)
1 |
|
S - C Looooops (exgcd)
思路
满足下列方程
ax0+by0=gcd(a,b);
如果c%gcd==0 那么此方程有解,否则没有解
若有解
方程两边同时乘以 c/gcd(a,b) 得 (a×c/gcd(a,b))×x0+(bc/gcd(a,b))y0=c;
这时得出方程的一个解 x1=x0×c/gcd(a,b) y1=y0×c/gcd(a,b)
求最小整数解 意思把x1变到减少到不能减少为止 也就是把x0 减少到不能减少为止
若x0减小x,那么方程左边 整体会减少 (ac/gcd(a,b))x 此时 y0 需要增加相应的数使得等式平衡
而假设 y0增加了y 总体增加了 (bc/gcd(a,b))y 此时 (ac/gcd(a,b))x==(ac/gcd(a,b))y
而且x,y为整数 我们可以得到 x/y==b/gcd(a,b) / a/gcd(a,b)
这时 x每次减少 b/gcd(a,b) y只需增加 a/gcd(a,b) 就可以使得等式平衡。 那为什么我们不约掉gcd(a,b)?
因为x越小,我们得到的最小整数解就会越小。。。。
这时我们让x0不断减 x (x=b/gcd(a,b)) 直到 x0-ix>=0 && x0-(i+1)x<0 (i为减x的次数) 这时得到的就是最小整数解
1 |
|
U - Primes (水)
1 |
|
X - Farey Sequence (欧拉函数)
1 |
|