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