给定对的查找解(因子数量,素因子数量)

问题描述 投票:-2回答:3

已给出xk,其中x是数A的因子数,kA的素数数。给定xk,我必须找出是否存在这样的A

例如:

INPUT : 4 2 
OUTPUT : 1

由于6是具有4个因数1、2、3、6的数,其中2是质数(2,3)。还假定xk可以具有1到10 9之间的任何值。

这是我的代码:

long long int x, k;
scanf("%lld%lld", &x, &k);

int ans = 0;

bool stop = false;

for (long long int numbers = 1; numbers < pow(10, 9) && !stop; numbers++) {
    long long int noOfFactors = 0, noOfPrimes = 0;
    for (long long int a = 1; a <= numbers && !stop; a++) {
        if (numbers % a == 0) {
            noOfFactors += 1;
            if ((isprime(a)) == 1) {
                noOfPrimes += 1;
            }
         }
     }
     if (noOfFactors == x && noOfPrimes == k) {
         ans = 1;
         stop = true;
     } else
         ans = 0;
}   
printf("%d\n", ans);

如果x为质数,则isprime(x)返回1,否则为0。

但是在运行程序时,它显示TLE错误。谁能帮助我优化该算法,或者如果存在其他方法,您可以向我解释一下吗?在优化此算法或使用其他方法方面的任何帮助将不胜感激。

我有x和k,其中x是数A的因数,k是A素数的数。给定x和k,我必须找出这样的A是否存在。例如:INPUT:...

c algorithm factors largenumber
3个回答
4
投票

p


0
投票
for (long long int numbers = 1; numbers < pow(10, 9) && !stop; numbers++)

pow将在每次迭代中不必要地被调用。将每个常量保存到循环之前的变量中。但是在这种情况下,只需使用numbers < 1e9


-1
投票
请勿混合使用浮点运算和整数运算。使用1000000000代替pow(10, 9)

可以比您更早地停止内循环:仅在a * a < numbers时运行内循环,并为每个匹配项添加2个除数。如果a * a == numbers,则添加另一个除数。

[noOfFactors > xnoOfPrimes > k时也停止内循环。
© www.soinside.com 2019 - 2024. All rights reserved.