Given a positive integer, , find and print the number of pairs of positive integers , where , that exist such that the equation (where and are positive integers) has at least one solution.
Input Format
A single positive integer denoting .
Constraints
Output Format
Print a single integer denoting the number of such pairs.
Sample Input 0
4
Sample Output 0
2
比赛的题,感觉这些题目质量都很差
1.测试数据少,有的题目可能不需要什么算法就能过
2.不给你写时间限制,基本靠感觉。
枚举a,枚举x,这样可以算出yb是什么,对于yb来说,在枚举yb的因数。这样算一下,比直接枚举快多了。
其实就等于提前打了个因数表,每次不用再算一遍。
快就快再这里。然而就算快也是跑了接近15秒钟。
#include<bits/stdc++.h>
using namespace std;
vector<int>ycq[300010];
int mach[300010];
typedef vector<int>::iterator it;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(int i=1; i<=n; i++)
{
mach[i]=0;
for(int j=1; j*j<=n; j++)
{
if(i%j==0)
{
ycq[i].push_back(j);
if(j*j!=i)
{
ycq[i].push_back(i/j);
}
}
}
sort(ycq[i].begin(),ycq[i].end(),greater<int>());
}
for(int a=1; a<n; a++)
{
for(int x=1; x*a<n; x++)
{
int yb=n-x*a;
for(it itt=ycq[yb].begin(); itt!=ycq[yb].end(); itt++)
{
if((*itt)<=a)
break;
if(mach[*itt]!=a)
{
sum++;
mach[*itt]=a;
}
}
}
}
printf("%d\n",sum);
}
}