C++ 我试图找到一个数的阶乘因子

C++ 我试图找到一个数的阶乘因子,c++,primes,factorial,prime-factoring,C++,Primes,Factorial,Prime Factoring,我试图解决SPOJ问题,实际上我们需要找到一个数的阶乘。虽然我使用了正确的公式,同时我也检查了0和1的特例,但我仍然得到了错误的答案,我真的很难找出我的代码出了什么问题。有人能帮我解决这个问题吗?为了便于参考,我提供了问题的链接:- #包括 #包括 #定义MOD 10000007 #定义最大50001 #定义pb推回 使用名称空间std; typedef long-long-ll; ll无因子(整数、向量素数) { ll结果=1; 用于(int i=0;inum) 打破 llk=素数[i]; l

我试图解决SPOJ问题,实际上我们需要找到一个数的阶乘。虽然我使用了正确的公式,同时我也检查了0和1的特例,但我仍然得到了错误的答案,我真的很难找出我的代码出了什么问题。有人能帮我解决这个问题吗?为了便于参考,我提供了问题的链接:-

#包括
#包括
#定义MOD 10000007
#定义最大50001
#定义pb推回
使用名称空间std;
typedef long-long-ll;
ll无因子(整数、向量素数)
{
ll结果=1;
用于(int i=0;inum)
打破
llk=素数[i];
ll计数=0;
while(num/k!=0){
计数=(计数+(num/k))%MOD;
k=k*素数[i];
}
结果=(结果*((计数+1)%MOD))%MOD;
}
返回结果;
}
向量seive(){
bool-isPrime[MAX];
向量v;
对于(int i=2;i>num;
向量v1;
v1=seive();
除数=无因数(num,v1);

问题表明答案应该在
MOD 10^9+7
中,但您错误地将
MOD
定义为
10^8+7
,您得到了什么答案?您希望得到什么答案?您的输入是什么?您可以访问什么调试器?另请参见
typedef long long ll;
为什么?
\define pb push_back
双重原因??请在问题中解释代码应该做什么,输入、预期输出和实际输出(a)顺便说一下,你制作了正确的结果,我希望你达到了时间限制。你正在制作矢量的不必要拷贝,更重要的是,你为每个测试用例筛选出相同的数字,C++中的符号<代码> ^ <代码>是异或的。表达式<代码> 10 ^ 9 <代码>与<代码>(10异或9)相同。
#include<iostream>
#include<vector>
#define MOD 100000007
#define MAX 50001
#define pb push_back
using namespace std;

typedef long long ll;

ll no_of_factors(int num,vector<int> primes)
{
    ll result=1;
    for(int i=0;i<primes.size();i++)
    {
        if(primes[i]>num)
            break;
        ll k=primes[i];
        ll count=0;
        while(num/k!=0){
            count=(count+(num/k))%MOD;
            k=k*primes[i];
        }
        result=(result*((count+1)%MOD))%MOD;
    }
    return result;
}

vector<int> seive(){
    bool isPrime[MAX];
    vector<int> v;
    for(int i=2;i<MAX;i++)
        isPrime[i]=true;
    
    for(int i=2;i*i<MAX;i++)
    {
        if(isPrime[i])
        {
            for(int j=i*i;j< MAX;j+=i)
                isPrime[j]=false;
        }
        
    }
    
    for(int i=2;i<MAX;i++)
    {
        if(isPrime[i])
            v.pb(i);
    }

    return v;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int num;
        ll divisors;
        cin>>num;
        vector<int> v1;
        v1=seive();
        
        divisors=no_of_factors(num,v1);
        cout<<divisors<<endl;
        
    }
    return 0;
}