1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 费马大定理与费马小定理

费马大定理与费马小定理

时间:2021-02-03 16:32:55

相关推荐

费马大定理与费马小定理

费马大定理

费马大定理,又被称为“费马最后的定理”,由17世纪法国数学家皮耶·德·费玛提出。

他断言当整数n >2时,关于x, y, z的方程 xn + yn = zn 没有正整数解。

德国佛尔夫斯克曾宣布以10万马克作为奖金奖给在他逝世后一百年内,第一个证明该定理的人,吸引了不少人尝试并递交他们的“证明”。

被提出后,经历多人猜想辩证,历经三百多年的历史,最终在1995年被英国数学家安德鲁·怀尔斯彻底证明。

证明过程:

过于麻烦,请自己百度。

推荐例题

hdu6441:

地址:http://acm./showproblem.php?pid=6441

题意:对于xn + yn = zn这个式子给出x和n,问你y和z的值。

解题思路:

由费马大定理知道,当n>2的时候,是没有正整数解的。又当n=0时,也是无解的,所以直接输出-1,-1。

当n=1时,只要输出 1 和 x+1就行了。

当n=2时,式子变为了x2 + y2 = z2,进行变换后得到,x2 = z2 - y2 => x2 = (z-y)(z+y),又容易得到z+y一定大于z-y,所以找到x2的两个约数,让z+y等于大的,z-y等于小的。我们又看到联立方程组后 得到:2z = 大的约数+小的约数。 为了让z为整数,两约数之和必须为偶数。

AC代码:

#include <iostream>#include <cmath>typedef long long ll;using namespace std;int main(){int t;cin >> t;while (t--){ll n, a;scanf("%lld %lld", &n, &a);if (n > 2 || n == 0){printf("-1 -1\n");}else if (n == 1){printf("1 %lld\n", a+1);}else{ll b = 0, c = 0;ll d = pow(a, 2);for (int i=1; i<=sqrt(d); i++){if (d % i == 0 && (i+d/i)%2 == 0){c = (i+d/i)/2;b = i>d/i ? (i-c):(d/i-c);printf("%lld %lld\n", b, c);break;}}}}return 0;}

费马小定理

费马小定理(Fermat’s little theorem)是数论中的一个重要定理,在1636年提出。如果p是一个质数,而整数a不是p的倍数,则有a(p-1)≡1(mod p)。

推荐例题:

hdu6440

地址:http://acm./showproblem.php?pid=6440

题意:给你一个数字p,让你打印出符合(m+n)p=mp+np的加法表和乘法表。

解题思路:由费马小定理知道 a(p-1)≡1(mod p),又由题意我们看到ap = ap-1a,因此我们得到 ap≡a(mod p)。设a等于m+n的话,得到(m+n)p = (m+n) mod p。对于mp+np,如果对其模p得到(mp mod p + np mod p)mod p,由上面定理的到(m+n) mod p。因此可得出:

(m+n)p = (m+n) mod p = mp+np ,对于加法表我们推理出来了,乘法表只要把(mn)看作a就行了。

AC代码:

#include <iostream>using namespace std;int main(){int t;cin >> t;while (t--){int p;cin >> p;for (int i=0; i<p; i++){for (int j=0; j<p; j++){cout << (i+j) % p;char c = j == p-1 ? '\n':' ';cout << c; }}for (int i=0; i<p; i++){for (int j=0; j<p; j++){cout << (i*j) % p;char c = j == p-1 ? '\n':' ';cout << c; }}}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。