让 l r 为给定范围 我们知道 l 和 r 中的数字,以便它可以表示为x ^ p由
给出 floor(powl((long double)r,1.0/(long double)p) - ceil(powl((long double)l,1.0/(long double)p)
现在真正的问题,
我需要 l 和 r , x 之间的所有数字,这样只有x的 pth 根存在而没有别的。
例如,在 1 - 20 和 p = 2 范围内,有效数字为
{4,9}
16在集合中没有出现的原因是因为16可以表示为2 ^ 4。
现在我想对范围执行重复的包含 - 排除原则并找到数字,使得它们只能表示为幂p!
答案 0 :(得分:0)
使用筛子:
维护一个整数的素数列表,用2²初始化。
迭代
计算下一个整数的平方;
同时,取出列表中最小的元素并将其提升到下一个主要力量;
取决于两者中的最小值,延长列表或更新最小元素;
如果是关系,请优先考虑列表中的元素;
2^2 (<3^2)
2^3 (<3^2)
2^3 3^2 (<4^2)
2^4 3^2 (=4^2)
2^4 3^2 5^2 (<6^2)
2^4 3^3 5^2 (<6^2)
2^5 3^3 5^2 (<6^2)
2^5 3^3 5^3 (<6^2)
...