[kuangbin带你飞]数论基础的简单题解

来源:互联网 发布:linux退出vi编辑命令 编辑:程序博客网 时间:2024/05/19 16:06

查看题目与代码参考

打星题还没做

Problem A

LightOJ 1370 Bi-shoe and Phi-shoe

欧拉函数+枚举。令k = lucky number+1开始枚举k,直到lucky number φ(k)

Problem B

LightOJ 1356 Prime Independence

*质因数分解+最大独立集。大致的想法是把冲突的2个数连一条边,然后把所有数分成质因子个数(例如8有3个质因子:2,2,2)为奇和偶两部分,以质因子个数为奇为偶构建一个二分图,那么质因子个数同奇或同偶的数一定不是另外一个数的质数倍。

Problem C

LightOJ 1341 Aladdin and the Flying Carpet

质因数分解求约数个数。n=pa11pa22pass, 那么n的约数个数 num(n)=(a1+1)(a2+1)(as+1).
详解及代码可查看http://blog.csdn.net/qq_15714857/article/details/48558963

Problem D

LightOJ 1336 Sigma Function

判断约数之和奇偶性。一个数n=pe11pe22pess的约数之和

sum(n)=pe1+111p11pe2+121p21pes+1s1ps1

也等于
sum(n)=(p01+p11+pe11)(p02+p12+pe22)(p0s+p1s+pess)

可以发现,若 pi=2(p0i+p1i+peii) 一定为奇数;
pi2(p0i+p1i+peii) 只有在 ei 为偶数时为奇数;
同时,只要任意一个 (p0i+p1i+peii) 为偶数,那么约数之和一定是偶数;反之,若约数之和为奇数,那么除了2之外所有 ei 都为偶数,n 一定是 x2 , 2x2x2 的形式,而 2x 显然包含在另外两者之中,所以我们减去 x2 , 2x2 形式的数字即可。
很明显,n 以内 x2 形式的数有 n 个 , 2x2 形式的数字有 (n/2)个,答案即是 nn(n/2)

Problem E

LightOJ 1282 Leading and Trailing

输出一个数的前k位与后k位。前k位利用log10,后k位利用mod10,详解与代码:http://blog.csdn.net/qq_15714857/article/details/48559687

Problem F

LightOJ 1259 Goldbach`s Conjecture

筛素数+枚举。计算一个数可以被表示成两个素数之和的方案数,预处理出n以内的数是否是素数即可。

Problem G

LightOJ 1245 Harmonic Number (II)

long long H( int n ) {    long long res = 0;    for( int i = 1; i <= n; i++ )        res = res + n / i;    return res;}

当除数越大时,所得商就基本不变,那么我们把n 之前的值正常累加,后面的值累计商*商的个数即可,商的个数等于n/商-n/(商+1)。

Problem H

LightOJ 1236 Pairs Forming LCM

统计lcm(i,j)==n的二元组,1<=i<=j<=n.
http://blog.csdn.net/qq_15714857/article/details/48641121

Problem I

LightOJ 1234 Harmonic Number

计算调和数。数学好的话直接用欧拉常数来计算。。euler = 0.5772156649015328606,答案大致等于 log(n) + euler + 1.0 / ( 2 * n ) - 1.0 / ( 12 * n^2 ) + 1.0 / ( 120 * n^4 ),当然这里前三项就够了。也可以分段计算,把n分成100项为一组先预处理出答案,再计算剩余的。

Problem J

LightOJ 1220 Mysterious Bacteria

x=bp 已知 x , 求最大的 p 。
枚举b即可。。但要注意x若为负数的话要求p必须为奇数。

Problem K

LightOJ 1214 Large Division

高精度计算一个数能否被另一个数整除。怕麻烦用java,不怕的话模拟一下ans = ( 10 * ans + ( a[i] - '0' ) ) % b ,后者必前者快三十多倍。

Problem L

LightOJ 1213 Fantasy of a Summation

找规律。
ans = k * sum % MOD * fast_pow( n , k - 1 , MOD ) ;

Problem M

LightOJ 1197 Help Hanzo

区间筛素数裸题。

Problem N

LightOJ 1138 Trailing Zeroes (III)

n! 尾部有q个0,求最小n。阶乘结果分解成质因数幂相乘之后,尾部0的个数就等于5的幂,故x! 尾部有 x/5 + x/25 + x/125 + x/625 +… 个零 ,二分答案即可。

Problem O

UVA 11426 GCD - Extreme (II)

输入n,求

gcd(1,2)+gcd(1,3)+gcd(2,3)+...+gcd(n1,n)

大白书例题。

f(n)=gcd(1,n)+gcd(2,n)+...+gcd(n1,n)
那么答案 S(n)=f(1)+f(2)+...+f(n)

gcd(x,n)的值均为n的约数,枚举n的约数i,
gcd(x,n)=igcd(x/i,n/i)=1
故满足条件的 x/i 有 φ(n/i)个。那么

f(n)=i|nφ(n/i)i

Problem P

UVA 11754 Code Feat

*大白书例题,dfs+CRT。

Problem Q

UVA 11916 Emoogle Grid

*大白书例题,离散对数。

Problem R

POJ 1061 青蛙的约会

模线性方程。简而言之就是求解

(mn)t=(xy)modL

Problem S

POJ 2115 C Looooops

模线性方程。简而言之就是求解

cx=(ba)mod2k

Problem T

POJ 2116 Death to Binary?

*fibonacci+模拟。巨麻烦的模拟题。。

Problem U

HDU 2161 Primes

素性检测裸题。

Problem V

UVA 11827 Maximum GCD

输入处理+暴力。

Problem W

UVA 10200 Prime Time

预处理一下然后直接查询。。

Problem X

SGU 106 The equation

扩展欧几里得的应用。
很好的题解 :
http://www.cnblogs.com/Rinyo/archive/2012/11/25/2787419.html
求解 ax+by+c=0 在指定区间内的整数解 ,我们可以考虑 ax+by=c 在指定区间内的整数解 , 当 b/| gcd(a,b) 显然无解。
d=gcd(a,b) 我们就可以把原方程转化为

a/dx+b/dy=c/d
然后通过扩展gcd便可得到一组可行解 (x0,y0),则其余解即为 x=x0+kb,y=y0ka,结合约束条件即可得到答案。

Problem Y

POJ 2478 Farey Sequence

F(n)=F(n1)+φ(n)

Problem Z

UVA 11752 The Super Powers

枚举+筛素数。
x=an ,预处理每一个数是否是素数,当 n 不是一个素数也不是1的时候,n 即可分解,x 便符合题意。

0 0