小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。
例如:半径的平方如果为25
优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。
输入为一个整数,即为圆半径的平方,范围在32位int范围内。
输出为一个整数,即为优雅的点的个数
25
12
R2 = int(input()) N = int(R2 ** 0.5) num = 0 ''' for i in range(N+1): for j in range(N+1): if i ** 2 + j ** 2 == R2: if (i==0 and j!=0) or (i!=0 and j==0): num += 2 elif i!=0 and j!=0: num += 4 break print(num) ''' ''' 您的代码已保存 运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。 case通过率为60.00% ''' for i in range(N+1): for j in range(i,N+1): if i ** 2 + j ** 2 == R2: if i==0 and j!=0: num += 2 * 2 elif i!=0 and j!=0: if i != j: num += 4 * 2 elif i == j: num += 4 break print(num) ''' 您的代码已保存 运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。 case通过率为60.00% '''
#-*- coding:utf-8 -*- #思路很直接,勾股定理的应用即可,当圆的半径为整数,也就是可以有(0,+-r)构成的时候,(0,+-r)和(+-r,0)共四种 #其余时候,类似于(+/-3, +/-4)就是四种,遍历 rr = input() count = 0 if int(rr**0.5)**2 == rr: count += 4 end = rr**0.5 if end != int(end): #当圆的半径长不是整数的时候,比如说(1,2)的时候,rr为5, #如果取end=int(5**0.5),这样(2,1)就没被考虑到 end += 1 end = int(end) for i in range(1,end): j = (rr - i**2)**0.5 if j == int(j): count += 4 print(count)
from math import sqrt
def countGracePoint(number):
squareSet = set()
for i in range(int(sqrt(number)) + 1):
squareSet.add(i ** 2)
res = 0
for i in range(int(sqrt(number)) + 1):
if number - i ** 2 in squareSet:
if i != 0 and number - i ** 2 != 0:
res += 4
else:
res += 2
return res
a = int(input())
print(countGracePoint(a))
#coding:utf-8 import math r2=int(input()) r=int(math.sqrt(r2)) if r<=0: print(0) number0=0#有0的坐标组合 number1=0#无0的坐标组合 myset=set(range(0,r+1))#set查找只需O(1)时间,降低时间复杂度 for i in range(0,r+1): j=math.sqrt(r2-i**2) if j in myset: if not i or not j:#i、j任一为0 number0+=1 else:#i、j均不为0 number1+=1 number=number0*2+number1*4#有0的组合分布在两个象限,无0的组合分布在4个象限 print(number)
import math n=input() def Get_elegant_point_numbers(r2): r2 = float(r2) if r2 == 0 : return 0 r = int(math.sqrt(r2)) count=0 if r == math.sqrt(r2) : count += 4 res=[] for i in range(1,r): flag = math.sqrt(r2 - i**2) if int(flag) == flag : res.append(int(flag)) res.append(i) return count+len(set(res))*4 print(Get_elegant_point_numbers(n))
from math import sqrt def nCouple(N): r=int(sqrt(N)) count=0 for i in range(r+1): j=sqrt(N-i**2) if j in range(r+1) : if i==0 or j==0: count+=2 else: count+=4 return count if __name__=='__main__': n=int(input()) print(nCouple(n))