|
想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全试题编号:202312-2试题名称:因子化简时间限制:2.0s内存限制:512.0MB问题描述:题目背景质数(又称“素数”)是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。问题描述小P同学在学习了素数的概念后得知,任意的正整数 n 都可以唯一地表示为若干素因子相乘的形式。如果正整数 n 有 m 个不同的素数因子 p1,p2,⋯,pm,则可以表示为:n=p1t1×p2t2×⋯×pmtm。小P认为,每个素因子对应的指数 ti 反映了该素因子对于 n 的重要程度。现设定一个阈值 k,如果某个素因子 pi 对应的指数 ti 小于 k,则认为该素因子不重要,可以将 piti 项从 n 中除去;反之则将 piti 项保留。最终剩余项的乘积就是 n 简化后的值,如果没有剩余项则认为简化后的值等于 1。试编写程序处理 q 个查询:每个查询包含两个正整数 n 和 k,要求计算按上述方法将 n 简化后的值。输入格式从标准输入读入数据。输入共 q+1 行。输入第一行包含一个正整数 q,表示查询的个数。接下来 q 行每行包含两个正整数 n 和 k,表示一个查询。输出格式输出到标准输出。输出共 q 行。每行输出一个正整数,表示对应查询的结果。样例输入321558950643221000000000010样例输出2238728110000000000样例解释查询一:n=23×32×234×107其中素因子 3 指数为 2,107 指数为 1。将这两项从 n 中除去后,剩余项的乘积为 23×234=2238728。查询二:所有项均被除去,输出 1。查询三:所有项均保留,将 n 原样输出。子任务40% 的测试数据满足:n≤1000;80% 的测试数据满足:n≤105;全部的测试数据满足:10:ans.append((i,tmp))i+=1#大于sqrt(n)的素因子最多只有1个ifnum>1:ans.append((num,1))returnansif__name__=="__main__":q=int(input())foriinrange(q):#乘积结果mlc=1#n:整数k:阈值n,k=map(int,input().split())#求n以内的所有素数因子,并用因子形式表示num_primes=decompose(n)foriteminnum_primes:ifitem[1]>=k:mlc*=item[0]**item[1]print(mlc) 运行结果:C++题解:#includeusingnamespacestd;inlineintread(){intx=0,f=1;charc=getchar();while(c'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&c'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&cNums[i]?MaxNum:Nums[i];}FillPrimeList(MaxNum);for(inti=1;i=Ks[i])CurAns*=pow(PrimeList[CurIndex],CurCnt);++CurIndex;CurCnt=0;}}cout<< CurAns << '\n'; }}
运行结果:
|
|