形成N的非素数对是2个不同的非素数,其中数的乘积是N。
1<=n<=10^6
首先,Eratosthenes的筛子是O(N*log(log(N)),以列出所有低于或等于N的素数(当实现得很好时)。
第二:假设你将你的数分解为q
素数,它具有多重性,不需要筛选,最坏的情况下是O(sqrt(N))的过程(最坏的情况是:你的数是素数)。因此您有一个地图:
代码-Java
import java.util.HashMap;
import java.util.Map;
class Example {
static void factor(long N, Map<Long, Short> primesWithMultiplicity) {
// some arg checking and trivial cases
if(N<0) N=-N;
if(0==N) {
throw new IllegalArgumentException(
"Are you kidding me? Every number divides 0, "+
"you really want them all listed?"
);
}
if(1==N) {
primesWithMultiplicity.put(1L,(short)1);
return;
}
// don't try divisors higher than sqrt(N),
// if they would have been detected by their composite-complement
for(long div=2; div*div < N; ) {
short multiplicity=0;
while((N % div)==0) {
multiplicity++;
N /= div; // reduce N
}
if(multiplicity>0) {
primesWithMultiplicity.put(div, multiplicity);
}
div+= (div == 2 ? 1 : 2); // from 2 to 3, but then going only on odd numbers
}
// done.. well almost, if N is prime, then
// trying to divide up to sqrt(N) will lead an empty result. But,
// in this case, N will still be at original value (as opposed
// to being 1 if complete factored)
if(N>1) {
primesWithMultiplicity.put(N, (short)1);
}
}
static int countDistinctCompositePairs(long N) {
HashMap<Long, Short> factoringResults=new HashMap<>();
factor(N, factoringResults);
int ret=1;
for(short multiplicity : factoringResults.values()) {
ret*=multiplicity;
}
return ret/2;
}
static public void main(String[] args) {
System.out.println(countDistinctCompositePairs(24));
}
}
给定一个数N,我们如何求最大P*Q null 因此,暴力解决方案起作用。 再进一步,我们看到Q_max<=n/2,如果我们确实同意P =√n。 我们可以将我们的解决方案集细化为仅有那些值{P,n\2},其中n\2>=√N。 这可能看起来微不足道,但它只是消除了可能的解决方案集的1/3。 我们是否可以添加其他聪明的程序来进一步减少设置?
本文向大家介绍C ++中给定乘积的N个整数的最大GCD,包括了C ++中给定乘积的N个整数的最大GCD的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个整数N和P。P是N个未知整数的乘积。我们必须找到这些整数的最大可能GCD。假设N = 3,且P = 24,则不同的组将像{1,1,24},{1,2,12},{1,3,8},{1,4,6},{2 ,2,6},{2,3,4}。GCD为:1、1、1
我正在研究CodeChef中的一个问题,我需要计算n个数字的阶乘。 用户输入一个数字,该数字确定要对多少整数执行阶乘计算,然后输入要计算的数字。 我的问题是乘法本身。例如,如果我有一个int==5,那么结果将是20(它将仅通过最后一个阶乘计算n,而不是所有阶乘) 这就是问题所在: 外部循环定义要执行的计算数量。 内部循环通过迭代numberToProcess的每个索引并将其乘以每个小于要计算的数字
本文向大家介绍请写出一个函数求出N的阶乘(即N!)相关面试题,主要包含被问及请写出一个函数求出N的阶乘(即N!)时的应答技巧和注意事项,需要的朋友参考一下
特殊数字是这样的,即在素数指数上有素数位(2,3,5,7),在非素数指数上有非素数值。(例如,15743-素数索引(2,3,5)具有素数数字(5,7,3))。有多少个n位的特殊数字也可以被m整除。 例如,对于n=2和m=2,答案将是[12,42,62,82,92],所以是5。 我写了一个回溯算法,找到特殊数的所有这些排列,然后检查这些特殊数中的每一个是否可以被m整除,并返回计数。这对n和m的小值有