快手算法笔试质数分解个数和那题求个代码。

本地过了,线上没全过,不知道咋回事#快手#
全部评论
private int solve(int a){     int[] dp = new int[a];     dp[0] = 0;     dp[1] = 1;     dp[2] = 1;     dp[3] = 1;     boolean isPrime = true;     for(int i = 4; i <= a; i++){         isPrime = true;         for(int j = 2; j * j <= i; j++){             if(i % j == 0){                 isPrime = false;                 dp[i] = dp[j] + dp[i/j];                 break;             }         }         if(isPrime){             dp[i] = 1;         }     }     int sum = 0;     for(int i = 2; i <= a; i++){         sum += dp[i];     }     return sum; } 凭记忆写的,大概是这样,用dp[i]记录i有多少个质因子
点赞 回复 分享
发布于 2019-09-16 23:06
时间复杂度太高了吧??我也是那样你这样的情况,下面提示我时间复杂度高……😪
点赞 回复 分享
发布于 2019-09-17 10:17
#include <iostream> #include <cmath> using namespace std; int isPrime(int n) {     int k = int(sqrt(double(n)));     for (int i = 2; i <= k; i++)     {         if (n % i == 0)             return 0;     }     return 1; } int getPrimeFactor(int n) {     int count = 0;     if (n < 2)         return count;     if (isPrime(n))     {         cout << n << "\t";         count += 1;         return count;     }     else     {         for (int i = 2; i < n; ++i)         {             if (n % i == 0)             {                 cout << i << "\t";                 count += 1;                 count += getPrimeFactor(n / i);                 break;             }         }         return count;     } } int main() {     int n = 60;     int num = getPrimeFactor(n);     cout << endl          << num << endl;     return 0; }
点赞 回复 分享
发布于 2019-09-17 09:18
同求
点赞 回复 分享
发布于 2019-09-16 23:07
我也是,本地过了,线上不通过,找不到原因🤣
点赞 回复 分享
发布于 2019-09-16 23:05

相关推荐

评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务