日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【BZOJ】【1041】【HAOI2008】圆周上的点

發布時間:2023/12/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ】【1041】【HAOI2008】圆周上的点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數學


  orz hzwer

  完全不會做……

  很糾結啊,如果將來再遇到這種題,還是很難下手啊……

?

引用題解:

【分析】:

樣例圖示:

首先,最暴力的算法顯而易見:枚舉x軸上的每個點,帶入圓的方程,檢查是否算出的值是否為整點,這樣的枚舉量為2*N,顯然過不了全點。

然后想數學方法。

有了上面的推理,那么實現的方法為:

枚舉d∈[1,sqrt(2R)],然后根據上述推理可知:必先判d是否為2R的一約數。

此時d為2R的約數有兩種情況:d=d或d=2R/d。

第一種情況:d=2R/d。枚舉a∈[1,sqrt(2R/2d)] <由2*a*a < 2*R/d轉變來>,算出對應的b=sqrt(2R/d-a^2),檢查是否此時的A,B滿足:A≠B且A,B互質 <根據上面的推理可知必需滿足此條件>,若是就將答案加1

第二種情況:d=d。枚舉a∈[1,sqrt(d/2)] <由2*a*a < d轉變來>,算出對應的b=sqrt(d-a^2),檢查是否此時的A,B滿足:A≠B且A,B互質 <根據上面的推理可知必需滿足此條件>,若是就將答案加1

因為這樣只算出了第一象限的情況<上面枚舉時均是從1開始枚舉>,根據圓的對稱性,其他象限的整點數與第一象限中的整點數相同,最后,在象限軸上的4個整點未算,加上即可,那么最后答案為ans=4*第一象限整點數+4

?

【時間復雜度分析】:

枚舉d:O(sqrt(2R)),然后兩次枚舉a:O(sqrt(d/2))+O(sqrt(R/d)),求最大公約數:O(logN)

1 /************************************************************** 2 Problem: 1041 3 User: Tunix 4 Language: C++ 5 Result: Accepted 6 Time:192 ms 7 Memory:816 kb 8 ****************************************************************/ 9 10 //BZOJ 1000 11 #include<cmath> 12 #include<cstdio> 13 using namespace std; 14 typedef long long LL; 15 typedef double lf; 16 /******************tamplate*********************/ 17 LL r,ans; 18 LL gcd(LL x,LL y){return y?gcd(y,x%y):x;} 19 bool check(LL y,lf x){ 20 if (x==floor(x)){ 21 LL x1=x; 22 if (gcd(x1*x1,y*y)==1 && x1*x1!=y*y) 23 return 1; 24 } 25 return false; 26 } 27 int main(){ 28 scanf("%lld",&r); 29 for(LL d=1;d<=sqrt(2*r);d++) 30 if (2*r%d==0){ 31 for(LL a=1;a<=(LL)sqrt(2*r/(2*d));a++){ 32 lf b=sqrt((2*r)/d-a*a); 33 if (check(a,b))ans++; 34 } 35 if (d!=2*r/d){ 36 for(LL a=1;a<=(LL)sqrt(d/2);a++){ 37 lf b=sqrt(d-a*a); 38 if (check(a,b))ans++; 39 } 40 } 41 } 42 printf("%lld\n",ans*4+4); 43 return 0; 44 } View Code

1041: [HAOI2008]圓上的整點

Time Limit: 10 Sec??Memory Limit: 162 MB
Submit: 2376??Solved: 1019
[Submit][Status][Discuss]

Description

求一個給定的圓(x^2+y^2=r^2),在圓周上有多少個點的坐標是整數。

Input

r

Output

整點個數

Sample Input

4

Sample Output

4

HINT

n<=2000 000 000

Source

[Submit][Status][Discuss]

轉載于:https://www.cnblogs.com/Tunix/p/4428004.html

總結

以上是生活随笔為你收集整理的【BZOJ】【1041】【HAOI2008】圆周上的点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。