银白之翼
C++博客
首页
新随笔
联系
聚合
管理
随笔-2 评论-0 文章-0 trackbacks-0
置顶随笔
[置顶]认真一些,做点事情,就这些
写给自己的BLOG。
posted @
2010-08-27 14:53
Lancelot 阅读(118) |
评论 (0)
|
编辑
收藏
2010年9月2日
质数分解平方和
1
#include
<
iostream
>
2
#include
<
stdio.h
>
3
#include
<
cmath
>
4
#include
<
cstdlib
>
5
#include
<
algorithm
>
6
using
namespace
std;
7
long
long
mp(
long
long
a,
long
long
b,
long
long
n)
8
{
9
long
long
d
=
1
,t
=
a;
10
while
(b
>
0
)
11
{
12
if
(b
%
2
==
1
) d
=
d
*
t
%
n;
13
b
/=
2
;
14
t
=
t
*
t
%
n;
15
}
16
return
d;
17
}
18
long
long
tu, tv;
19
long
long
Gau(
double
x)
20
{
21
if
(x
+
1e
-
8
>
(
long
long
)x)
return
(
long
long
)x;
22
return
(
long
long
)x
-
1
;
23
}
24
int
main()
25
{
26
long
long
p, M, a, B, r, A, x, y,ta,tb;
27
while
(scanf(
"
%lld
"
,
&
p)
==
1
)
28
{
29
if
(p
%
4
!=
1
)
30
{
31
printf(
"
Illegal\n
"
);
32
continue
;
33
}
34
B
=
1
;
35
a
=
2
;
36
A
=
mp(a , (p
-
1
)
/
4
,p);
37
while
((A
*
A
+
1
)
%
p
!=
0
)
38
{
39
a
++
;
40
A
=
mp(a , (p
-
1
)
/
4
,p);
41
}
42
M
=
((A
*
A
+
1
)
/
p);
43
tu
=
A
%
M;
44
tv
=
B
%
M;
45
while
(M
>
1
)
46
{
47
tu
=
A
+
M
*
Gau(
0.5
-
double
(A)
/
double
(M));
48
tv
=
B
+
M
*
Gau(
0.5
-
double
(B)
/
double
(M));
49
r
=
(tu
*
tu
+
tv
*
tv)
/
M;
50
ta
=
abs((tu
*
A
+
tv
*
B)
/
M);
51
tb
=
abs((tv
*
A
-
tu
*
B)
/
M);
52
A
=
ta;
53
B
=
tb;
54
M
=
r;
55
}
56
if
(A
>
B)
57
swap(A,B);
58
printf(
"
Legal %lld %lld\n
"
, A, B);
59
}
60
}
61
62
posted @
2010-09-02 10:34
Lancelot 阅读(257) |
评论 (0)
|
编辑
收藏
2010年8月27日
认真一些,做点事情,就这些
写给自己的BLOG。
posted @
2010-08-27 14:53
Lancelot 阅读(118) |
评论 (0)
|
编辑
收藏
仅列出标题
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2010年9月 (1)
2010年8月 (1)
搜索
最新评论
阅读排行榜
1. 质数分解平方和(257)
2. 认真一些,做点事情,就这些(118)
评论排行榜
1. 认真一些,做点事情,就这些(0)
2. 质数分解平方和(0)