Every day a leetcode
题目来源:1175. 质数排列
解法:判断质数+阶乘
方案总数=质数的全排列数(阶乘)* 非质数的全排列数(阶乘)
代码:
#define MOD 1000000007
bool isprime(int x)
{
if (x<=1) return false;
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0) return false;
}
return true;
}
long factorial(int n)
{
if (n<=1) return 1;
else return n*factorial(n-1)%MOD;
}
int numPrimeArrangements(int n){
int prime=0;
for (int i=1;i<=n;i++)
{
if(isprime(i)) prime++;
}
return factorial(prime)*factorial(n-prime)%MOD;
}
}
结果:

小疑问:1000000007 vs 1e9+7
若把
#define MOD 1000000007
修改为:
#define MOD 1e9+7
会报错。

请知道的大神在评论区指点。
解答
typeid 函数能给出一个变量的数据类型。
可以看出1e9+7是double,1000000007是int,问题就出在这个double身上,int就没问题。

注:编译器不同,直接打印typeid().name()的输出不同。

有的编译器打印的是数据类型首字母,有的则打印全。
博客探讨了在C++中解决1175.质数排列问题的算法,涉及判断质数的方法和阶乘计算。作者注意到使用1e9+7作为模数会导致编译错误,原因是1e9+7是double类型而非int,导致类型不匹配的问题。解决方案是确保使用相同类型的数值进行计算。

216

被折叠的 条评论
为什么被折叠?



