codeforces 577A Multiplication Table
Let’s consider a table consisting of n rows and n columns. The cell located at the intersection of i-th row and j-th column contains number i × j. The rows and columns are numbered starting from 1.
You are given a positive integer x. Your task is to count the number of cells in a table that contain number x.
Input
The single line contains numbers n and x (1 ≤ n ≤ 105, 1 ≤ x ≤ 109) — the size of the table and the number that we are looking for in the table.
Output
Print a single number: the number of times x occurs in the table.
Sample test(s)
Input
10 5
Output
2
Input
6 12
Output
4
Input
5 13
Output
0
Note
A table for the second sample test is given below. The occurrences of number 12 are marked bold.
这里写出几个容易WA的点:
1、首先,不要天真的暴力解,你不是小孩纸了~
2、当x=1的时候,只要n不是0,就要输出1,如果n是0,那么要输出0、
3、根据刮擦能够得知,如果是平方数,比如4 9 16 25 36.........只可能输出1,当然要在n*n>=x的条件下、
4、数据比较大,用long long、
然后就上AC代码了:
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
#define ll long long int
int main()
{
ll n,x;
while(~scanf("%I64d%I64d",&n,&x))
{
if(n*n==x)
{
printf("1\n");
continue;
}
if(x==1)
{
if(n==0)
{
printf("0\n");
continue;
}
printf("1\n");
continue;
}
ll output=0;
for(int i=1;i<=sqrt(x);i++)
{
if(i==1)
{
if(x<=n)
output+=2;
continue;
}
if(x%i==0&&i<=n)
{
if(x/i<=n&&x%x/i==0)
{
output+=2;
if(i==x/i)
output-=1;
}
}
}
printf("%I64d\n",output);
}
}