HDU 6211 本源勾股組 法里數列

2021-08-09 03:00:41 字數 1162 閱讀 9661

簡略題意:給出2k

個數v,求出(x

i,yi

,zi)

滿足xi

<1e

9 的所有本源勾股組之後,問∑

v[yi

%(2k

)]的答案是多少。

本源勾股組的構造: 找出m

,n(m

>n)

滿足x=

m2−n

2,y=

2mn,

z=m2

+n2,

(x,y

,z) 即為勾股組。若

m 和

n互質,且

m 和

n有乙個為偶數,則找到的為本源勾股組。

所以我們找到m2

+n2 的所有互質的m和

n 即可,而這點我們可以用法裡數列來構造得到,構造得到的勾股組個數有

159154994

這麼多。

所以預處理找到所有y,然後統計即可。

我本地是沒有跑出來的…然後在cf上跑了出來,耗時2640ms,比杭電快了1s左右。

#define others

#ifdef poj

#include

#include

#include

#include

#include

#include

#include

#endif // poj

#ifdef others

#include

#endif // others

//#define file

#define all(x) x.begin(), x.end()

using

namespace

std;

const

long

double eps = 1e-8;

//int dcmp(long double x) ;

typedef

long

long ll;

long

double _abs(long

double x)

namespace solver

void solve()

}}int main()

hdu1285 hdu4857 拓撲排序

一 原題內容 problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在...

樹狀陣列 hdu2689 hdu2838

題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...

hdu2068 hdu 2049 錯排組合

這部分涉及的知識為組合數和錯排 參考 比較簡單 hdu2068 include include int64 c int n,int m 組合數公式 return u d main sum for i 3 i 13 i f i i 1 f i 1 f i 2 while scanf d n n 另一題...