题目
题解思路
条件太少,正整数这个性质要把握好。
将x y 分离后 可以发现 x y如果都是正整数的话,N!平方必定整除X - N!平方,这样的话,我们只需找出N!平方 有多少个约数就行了,对于每个约数对应一个X,这里没有限制X的大小,所以必然能取到。
这样又回到了之前的阶乘分解
根据约数定理
我们只需对分解出的每个质因子的次数乘2然后+1进行连乘就行了。
参考文章
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7 ;
const int N = 1000010 ;
bool pr[N] ;
int prm [N] ;
int cnt = 1 ;
int n;
void in()
{
pr[1] = 1 ;
for (int i = 2 ; i <= n ; i++ )
{
if ( ! pr[i] )
{
prm[cnt] = i ;
cnt++;
for (int j = i*2 ; j <= n ; j+= i )
{
pr[j] = 1 ;
}
}
}
}
int main ()
{
ios::sync_with_stdio(false);
cin >> n ;
in();
long long ans = 0;
for (int i = 1 ; i < cnt ; i++ )
{
int p = prm[i] ;
int s = 0 ;
for (int j = n ; j > 0 ; j/=p )
s += j/p;
if ( ans == 0 )
ans = ( s*2 + 1 ) %mod ;
else
ans = ans *(s*2 + 1) %mod ;
}
cout << ans <<"\n";
return 0 ;
}