首页 > 试题广场 >

平方根问题

[编程题]平方根问题
  • 热度指数:178 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
考虑定义在两正整数上的函数SSR(平方根之和的平方):SSR(A, B) = (sqrt(A) + sqrt(B))^2。牛牛对函数值为整数的情况很感兴趣。现在给定整数n和m,请帮助牛牛计算有序对(A, B)的数量, 满足1 ≤ A ≤ n, 1 ≤ B ≤ m而且SSR(A, B)是一个整数。

输入描述:
输入包括两个整数n和m(1 ≤ n ≤ 10^5, 1 ≤ m ≤ 10^5)


输出描述:
输出一个整数,表示满足条件的有序对对数。
示例1

输入

3 8

输出

5
我也是python超时,用网上同样思路的java可以过
发表于 2018-10-02 23:17:28 回复(1)
更多回答
瞎写都能过测试用例,耗时并不是很严格。。。
import java.util.*;
import java.lang.Math;
public class Main{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=Integer.parseInt(sc.next());
        int m=Integer.parseInt(sc.next());
        if(n>m)
        {
            int temp=m;
            m=n;
            n=temp;
        }
        int count=0;
        int sqrtCount=0;
        for(int i=1;i<=n;i++)
        {
            if(Math.sqrt(i)%1==0)
                sqrtCount++;
        }
        for(int i=1;i<=m;i++)
        {
            if(Math.sqrt(i)%1==0)
                count+=sqrtCount;
            else if(nextNum(i)<=n)
                {
                    int base=nextNum(i);
                    for(int j=1;j<=n;j++)
                       if((base*j*j)>n)
                           break;
                       else
                           count++;
                }
        }
        System.out.print(count);
    }
    
    public static int nextNum(int num)
    {
        int count=1;
        int temp=0;
        while((count*count)<=num)
        {
            if(num%(count*count)==0)
                temp=num/count/count;
            count++;
        }
        if(temp==0)
            return num;
        else
            return temp;
    }
}
发表于 2018-09-30 14:03:59 回复(2)
 k=0
for i in range(10):
    for j in range(10):
        if (i*j)**0.5==int((i*j)**0.5):
            print(i,j)
            k=k+1
            print(k)

发表于 2018-09-29 20:49:59 回复(3)
使用Python运行超时,用时2000ms
发表于 2018-09-27 16:29:16 回复(1)