NOIP模擬 費馬小定理 高精度

2021-07-24 09:56:26 字數 4136 閱讀 2157

【問題描述】

小a 養了一大坨細胞。

最初小a 只有1 個細胞。每秒,小a 的每個細胞都會**成2 個細胞。

已知:現在離「最初」已經過去了x 秒,那麼現在的細胞數當然是可以計算的。

小a 想知道的當然不是當前的細胞數。小a 知道他養的細胞的習性:每y

個細胞會聚成一團。經常會有剩下的細胞,那麼我們稱這些細胞是孤獨的。

小a 想知道的就是孤獨的細胞個數。

【輸入檔案】

輸入檔案為cell.in。

輸入檔案共一行,為兩個整數x y,以空格隔開。

【輸出檔案】

輸出檔案為cell.out。

輸出檔案共一行,為乙個整數,即孤獨的細胞個數。

【輸入樣例】

3 3

【輸出樣例】

2 【資料規模和約定】

對於10%的資料,x<2^6。

對於20%的資料,x<2^17。

對於40%的資料,x<2^64。

對於70%的資料,x<2^2333。

對於100%的收,0≤x<2^233333,y 是3 到1000 之間(含兩端)的質數

解題思路:顯然2^x%y

but,,x巨大,又因為y是質數,那麼就想到了費馬小定理

(a^p-1)%p=1,,a,p互質。

然後我很愚蠢的用了高精度,而且還是最複雜的那種高精度,,,,

可以讀了一位一位模,也可以用高精度模,然而我減了一遍,乘了一遍,除了一遍。,wtf。。

**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#ifdef win32

#define auto "%i64d"

#else

#define auto "%lld"

#endif

#define inf 0x3f3f3f3f

#define clock clocks_per_sec

#define cle(x) memset(x,0,sizeof(x))

#define maxcle(x) memset(x,127,sizeof(x))

#define mincle(x) memset(x,-1,sizeof(x))

#define cop(a,x) memcpy(x,a,sizeof(a))

#define frop "cell"

#define c(a,b) next_permutation(a,b)

#define ll long long

#define smin(x,tmp) x=min(x,tmp)

using

namespace

std;

const

int n = 75000;

int y,p;

char s[n];

struct bigint

void readin()

}w[0]=now;

}bigint operator *(const

int b) const

}while(c.w[len])

while(!c.w[len]&&len>1)len--;

return c;

}bigint operator / (const

int b)const

tmp*=m;

}while(!c.w[len]&&len>1)len--;

return c;

}bigint operator - (const bigint &b)const

a.w[i+1]-=borrow;

borrow=0;

}while(!a.w[len]&&len>1)len--;

return a;

}bool

operator

< (const bigint &b) const

bool

operator > (const bigint &b)const

bool

operator >=(const bigint &b)const

bool

operator !=(const bigint &b)const

int kmi(int x)

int main()

其實最後也可以不用快速冪,誒,,,,寫了乙個最複雜的,就當練手高精度吧,。。。。除錯的我也很傷心。

給乙個對拍的**吧,,對拍打法好。,,,膜拜orz

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#ifdef win32

#define auto "%i64d"

#else

#define auto "%lld"

#endif

#define inf 0x3f3f3f3f

#define clock clocks_per_sec

#define cle(x) memset(x,0,sizeof(x))

#define maxcle(x) memset(x,127,sizeof(x))

#define mincle(x) memset(x,-1,sizeof(x))

#define cop(a,x) memcpy(x,a,sizeof(a))

#define frop "cell"

#define c(a,b) next_permutation(a,b)

#define ll long long

#define smin(x,tmp) x=min(x,tmp)

using

namespace

std;

const

int p[200]=;

int main()

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#ifdef win32

#define auto "%i64d"

#else

#define auto "%lld"

#endif

#define inf 0x3f3f3f3f

#define clock clocks_per_sec

#define cle(x) memset(x,0,sizeof(x))

#define maxcle(x) memset(x,127,sizeof(x))

#define mincle(x) memset(x,-1,sizeof(x))

#define cop(a,x) memcpy(x,a,sizeof(a))

#define frop "std"

#define c(a,b) next_permutation(a,b)

#define ll long long

#define smin(x,tmp) x=min(x,tmp)

using

namespace

std;

ll x;

int p;

int kmi(ll x)

int main()

哦,,我之前生成質數的那個都寫錯了,,,

。。。誒。。。。。。。。調了好久

費馬大定理與費馬小定理

費馬大定理,又被稱為 費馬最後的定理 由17世紀法國數學家皮耶 德 費瑪提出。他斷言當整數n 2時,關於x,y,z的方程 xn yn zn 沒有正整數解。德國佛爾夫斯克曾宣布以10萬馬克作為獎金獎給在他逝世後一百年內,第乙個證明該定理的人,吸引了不少人嘗試並遞交他們的 證明 被提出後,經歷多人猜想辯...

費馬小定理

選自 數論妙趣 數學女王的盛情款待 第六章 開門咒 數論中充斥著許多易於觀察到的事實,誘使人們用普通歸納推理的辦法去進行推廣。對此,必須慎之又慎,以免誤入陷阱。設想你偶而把 2自乘7次,再減去2,得2 7 2 126,隨後發現,126恰好能被2的冪指數7整除。接著又發現,25 2 30,30也能被2...

費馬小定理

費馬小定理 在較短時間內計算 a n p n極大 推倒 費馬小定律的描述,若a,p互質,則 a p 1 p 1 若不互質,則a p p a a,p互質,設n p 1 j餘n p 1 則 a n p a n p 1 p 1 j p a n p 1 a p 1 j p a n p 1 p a p 1 p...