首先是题目:
1006: 樱花
Description
给定n,求下面不定方程的正整数解 (x,y) 的数目。
Input
一个整数 nnn。(1≤n≤106)
Output
一个整数,表示有多少对 (x,y)满足题意。答案对 109+7 取模。
Sample Input
2
Sample Output
3
HINT
样例说明:共有三个数对 (x,y)满足条件,分别是 (3,6),(4,4)和 (6,3)。
对于下面的这个公式,我么首先对他进行推导:
(看了好多大佬的解析 )
当时的推导结果…(不是因为懒才传照片的)
然后就直接根据思路套板子就可以了:
代码如下:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
const int maxn=1e6+10;
const int mod=1e9+7;
int prime[maxn],isprime[maxn],n,cnt=0;
ll ans=1,c[maxn];
void shai()
{
isprime[1]=1;
for(int i=2;i<=n;i++)
{
if(!isprime[i])
{
isprime[i]=i;
prime[++cnt]=i;
}
for(int j=1;j<=cnt;j++)
{
if(prime[j]>isprime[i]||prime[j]*i>n)
break;
isprime[i*prime[j]]=prime[j];
}
}
}
int main()
{
while(cin>>n)
{
cnt=0;
shai();
for(int i=1;i<=cnt;i++)
{
c[i]=0;
for(ll j=prime[i];j<=n;j*=prime[i])
c[i]+=(n/j);
c[i]%=mod;
}
ans=1;
for(int i=1;i<=cnt;i++)
{
ans=(ans*(2*c[i]+1))%mod;
}
printf("%lld\n",ans);
}
return 0;
}
解答完毕啦~~~