给定两个数字,开始和结束分别代表一个正整数范围。目标是找到位于[start,end]范围内并具有素数分解的所有数字的计数,以使该数量的所有素数具有幂,使得它们的GCD为1。
如果一个数的质数分解为2 p * 3 q * 5 r …..则幂p,q,r ...应具有gcd = 1。
例如
输入-开始= 1,结束= 10
输出-质数幂的GCD等于1的范围内的数量计数是:6
说明-这些数字是:
2(2 1),3(3 1),5(5 1),7(7 1),8(2 3)和10(2 1 * 5 1)。每个素数分解的所有幂的gcd为1。
输入-开始= 11,结束= 20
输出-质数幂的GCD等于1的范围内的数量计数是:9
说明-这些数字是:
11(11 1),12(3 1 * 2 2),13(13 1),14(2 1 * 7 1),15(3 1 * 5 1),17(17 1),18(2 1 * 3 2),19(19 1 )和20(2 2 * 5 1)。每个素数分解的所有幂的gcd为1。
在这种方法中,我们将计算从开始到结束范围内不是完美功效的所有数字。由于非完美的功率将满足上述条件。为此,我们将找到所有完美的力量,并将其从总数中删除。
答案将是=开始-结束+1-(范围[start,end]内的完美幂的数量的计数)。
将范围变量start和end作为输入。
取向量vec来存储大于3的幂。
进行设定以存储为完美平方的数字。
进行sett_2来存储不是理想平方的数字。
函数calculate()填充向量vec并设置sett和sett_2。分隔为完美正方形,非完美正方形和幂> 3的数字。
使用for循环的遍历从i = 2到i <size。
插入完美力量i * i进行结算。
如果!= )返回true,那么我是一个完美的正方形并且存在于sett中,所以什么也不做。sett.find(i)sett.end()
循环运行,直到当前数字的幂保持小于大。
将奇数幂插入到sett_2中,因为偶数幂是完美的平方且处于sett中。
最后,使用for循环将排序后的sett_2值插入向量vec。
函数GCD_1(long int开始,long int结束)将范围作为输入,并返回质数的GCD幂等于1的范围内的数字计数。
致电calculate()。
计算范围为per_sq = floor(sqrtl(end))-floor(sqrtl(start-1))的完美平方。
在使用VEC开始UPPER_BOUND的计算上限值(,,结束) - 。vec.begin()vec.end()vec.begin()
在使用VEC =底部LOWER_BOUND(端的同样低的值,,启动) - 。vec.begin()vec.end()vec.begin()
按照per_pow = per_sq +(上-下)计算完美功效。
答案将是count =(end-start + 1)-per_pow。
最后返回结果计数。
#include <bits/stdc++.h> using namespace std; #define size 1000005 #define large 1e18 vector < long int > vec; set < long int > sett; set < long int > sett_2; void calculate() { for (long int i = 2; i < size; i++) { sett.insert(i * i); if (sett.find(i) != sett.end()) { continue; } long int total = i; while (i * i <= large / total) { total *= (i * i); sett_2.insert(total); } } for (auto it: sett_2) { vec.push_back(it); } } long int GCD_1(long int start, long int end) { calculate(); long int per_sq = floor(sqrtl(end)) - floor(sqrtl(start - 1)); long int top = upper_bound(vec.begin(), vec.end(), end) - vec.begin(); long int bottom = lower_bound(vec.begin(), vec.end(), start) - vec.begin(); long int per_pow = per_sq + (top - bottom); long int count = (end - start + 1) - per_pow; return count; } int main() { long int start = 10, end = 40; cout << "GCD的质因子的幂等于1的范围内的数量计数是: " << GCD_1(start, end); return 0; }
如果我们运行上面的代码,它将生成以下输出-
输出结果
GCD的质因子的幂等于1的范围内的数量计数是: 7