锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
濂戒箙娌℃湁鍋氭暟璁洪浜嗭紝寮辨浜嗭紝榪欓寮勪簡N涔咃紝鍥犱負娌℃湁鑰冭檻0榪欎釜鐗規畩鐨勫浼欎笉鑳戒綔涓洪櫎鏁般?br>棰樻剰鐩稿綋綆鍗曪紝灝辨槸鍒ゆ柇m鑳藉惁鏁撮櫎n錛併?br>瑙f硶錛氬m榪涜绱犲洜鏁板垎瑙o紝m = p1^t1 * p2^t2 * ... * ps^ts銆傞偅涔堝浜巔i錛屽垽鏂璶錛佹槸鍚﹀惈鏈墄涓洜鏁幫紝浣垮緱x >= ti銆?br>
tzc_2352
1#include <cstdio>
2#include <iostream>
3#include <cmath>
4#include <algorithm>
5#include <cstring>
6#include <string>
7#include <complex>
8#include <queue>
9using namespace std;
10typedef __int64 ll;
11
12const int maxn = 66000;
13bool vis[ maxn ];
14ll p[ maxn ];
15int plen, flen;
16int a[ 65 ], b[ 65 ];
17
18void prime( )
19{
20 ll i, j, k;
21 plen = 0;
22 memset( vis, false, sizeof( vis ) );
23 for( i = 2, k = 4; i < maxn; ++i, k += i + i - 1 )
24
{
25 if( !vis[i] )
26
{
27 p[ plen++ ] = i;
28 if( k < maxn ) for( j = k; j < maxn; j += i ) vis[ j ] = true;
29 }
30 }
31}
32
33void num_factor( ll n ) //鍦ㄦ湁绱犳暟琛ㄧ殑鍓嶆彁涓嬬殑绱犲洜鏁板垎瑙?/span>
34{
35 int i;
36 flen = 0;
37 for( i = 0; p[ i ] * p[ i ] <= n; i++ )
38
{
39 if( n % p[ i ] == 0 )
40
{
41 for( b[ flen ] = 0; n % p[ i ] == 0; ++b[ flen ], n /= p[ i ] );
42 a[ flen++ ] = p[ i ];
43 }
44 }
45 if( n > 1 ) b[ flen ] = 1, a[ flen++ ] = n;
46}
47
48int factor( ll n, ll p )
49{
50 int sum = 0;
51 while( n )
52
{
53 n /= p;
54 sum += n;
55 }
56 return sum;
57}
58
59int main(int argc, char *argv[])
60{
61 ll n, m;
62 prime( );
63 while( scanf("%I64d %I64d",&n,&m) != EOF )
64
{
65 if( m == 0 )
66
{
67 printf("0 does not divide %I64d!\n",n);
68 continue;
69 }
70 num_factor( m );
71 int flag = 0;
72 for( int i = 0; i < flen; i++ )
73
{
74 int tmp = factor( n, a[ i ] );
75 if( tmp < b[ i ] )
{ flag = 1; break; }
76 }
77 if( flag ) printf("%I64d does not divide %I64d!\n",m,n);
78 else printf("%I64d divides %I64d!\n",m,n);
79 }
80 return 0;
81}
82
姣旇禌鍓嶄竴澶╂櫄涓婂垰璺焗aozi鐮旂┒浜嗘渶灝忓寘鍥寸悆錛屽叾涓鏍規嵁鍥涗釜鐐規眰鍑虹悆蹇冨潗鏍囷紝鐒跺悗鎴戞彁鍑轟簡榪欎箞鎷撳睍鍒癗緇寸殑鎯呭喌銆備粖澶╂瘮璧涚殑鏃跺欏眳鐒跺氨鍑轟簡榪欎箞涓棰橈紝铏界劧鐭ラ亾鍙互鐢ㄩ珮鏂秷鍏冿紝浣嗘槸榪欓鐨勬暟鎹ソ澶э紝鏈?017閭d箞澶э紝鑰屼笖瑕佹槸鏁存暟瑙o紝鐢╠ouble綺懼害鏍規湰涓嶅銆傛垜鎯沖埄鐢ㄥぇ鏁存暟錛岃闃熷弸鍐欎簡涓涓猨ava鐨勶紝姣忔娑堝厓鐨勬椂鍊欏彇鏈灝忓叕鍊嶆暟錛岀粨鏋淭LE浜嗐傘傘傛瘮璧涚殑鏃跺欏彧鏈塰aozi浠栦滑闃熷拰鐢靛瓙縐戝ぇ鐨勪竴涓槦浼嶈繃浜嗭紝Orz錛侊紒錛?br />
璧涘悗錛岄棶浜嗕竴涓媓aozi錛屽洜涓烘渶鍚庣殑絳旀鍦╗ -1017 , 1017] 鐨勮寖鍥村唴錛屽彲浠ュ彇涓涓ぇ浜?×1017鐨勭礌鏁皃錛岃綆楃殑榪囩▼涓兘 mod p錛岀敱浜庡潗鏍囨湁姝f湁璐燂紝鍙互鍏堝皢鐞冨績鍧愭爣閮藉姞涓?017 榪欎箞涓涓亸縐婚噺錛屾渶鍚庢眰鍑虹瓟妗堜箣鍚庡湪鍓帀銆?br />PS: 楂樻柉娑堝厓鏀硅嚜嫻欏ぇ妯℃澘
2 #include <iostream>
3 #include <map>
4 #include <queue>
5 #include <complex>
6 #include <algorithm>
7 #include <cmath>
8 #include <cstring>
9 using namespace std;
10 typedef __int64 ll;
11
12 const ll p = 1000000000000000003LL;
13 const int maxn = 60;
14 const ll inf = 100000000000000000LL;
15
16 ll mod( ll a, ll n ) { return ( a % n + n ) % n; }
17
18 ll mul_mod ( ll a, ll b )
19 {
20 ll ret = 0, tmp = a % p;
21 while( b )
22 {
23 if( b & 1 )
24 if( ( ret += tmp ) >= p )
25 ret -= p;
26 if( ( tmp <<= 1 ) >= p ) tmp -= p;
27 b >>= 1;
28 }
29 return ret;
30 }
31
32 void gcd( ll a, ll b, ll & d, ll & x, ll & y )
33 {
34 if( ! b ) { d = a; x = 1; y = 0; }
35 else
36 {
37 gcd( b, a % b, d, y, x );
38 y -= x * ( a / b );
39 }
40 }
41
42 ll inv( ll a, ll n )
43 {
44 ll d, x, y;
45 gcd( a, p, d, x, y );
46 return d == 1 ? mod( x, p ) : -1;
47 }
48
49 ll ABS( ll a ) { return ( a < 0 ? -a : a ); }
50
51 int Gauss( int n, ll a[][maxn], ll b[] )
52 {
53 int i, j, k, row;
54 ll maxp, t;
55 for( k = 0; k < n; k++ )
56 {
57 for( maxp = 0, i = k; i < n; i++ )
58 if( ABS( a[i][k] ) > ABS( maxp ) )
59 maxp = a[row=i][k];
60 if( maxp == 0 ) return 0;
61 if( row != k )
62 {
63 for( j = k; j < n; j++ )
64 t = a[k][j], a[k][j] = a[row][j], a[row][j] = t;
65 t = b[k], b[k] = b[row], b[row] = t;
66 }
67 ll INV = inv( maxp, p );
68 for( j = k + 1; j < n; j++ )
69 {
70 a[k][j] = mul_mod( a[k][j], INV );
71 for( i = k + 1; i < n; i++ )
72 a[i][j] = mod( a[i][j] - mul_mod( a[i][k], a[k][j] ), p );
73 }
74 b[k] = mul_mod( b[k], INV );
75 for( i = k + 1; i < n; i++ )
76 b[i] = mod( b[i] - mul_mod( b[k], a[i][k] ), p );
77 }
78 for( i = n - 1; i >= 0; i-- )
79 for( j = i + 1; j < n; j++ )
80 b[i] = mod( b[i] - mul_mod( a[i][j], b[j] ), p );
81 return 1;
82 }
83
84 int main(int argc, char *argv[])
85 {
86 int cas, n;
87 ll a[maxn][maxn], b[maxn], c[maxn][maxn], d[maxn];
88 scanf("%d",&cas);
89 for( int t = 1; t <= cas; t++ )
90 {
91 scanf("%d",&n);
92 for( int i = 0; i <= n; i++ )
93 {
94 b[i] = 0;
95 for( int j = 0; j < n ; j++ )
96 {
97 scanf("%I64d",&a[i][j]);
98 a[i][j] += inf;
99 b[i] = ( b[i] + mul_mod( a[i][j], a[i][j] ) ) % p;
100 a[i][j] = ( a[i][j] + a[i][j] ) % p;
101 }
102 }
103 for( int i = 0; i < n; i++ )
104 {
105 for( int j = 0; j < n; j++ )
106 c[i][j] = mod( a[i][j] - a[n][j], p );
107 d[i] = mod( b[i] - b[n], p );
108 }
109 Gauss( n, c, d );
110 //gauss_cpivot( n, c, d );
111 printf("Case %d:\n",t);
112 printf("%I64d",d[0]-inf);
113 for( int i = 1; i < n; i++ )
114 printf(" %I64d",d[i]-inf);
115 printf("\n");
116 }
117 return 0;
118 }
嫻欐睙鐞嗗伐閭璇瘋禌G棰橈紝鍙堟槸涓閬撴瘮璧涚殑鏃跺欐病鏈夊仛鍑烘潵鐨勯鐩紝褰撴椂鎬濊礬琚鐩粰鐨勫叕寮忛檺鍒朵綇浜嗭紝涓鐪嬫湁闄ゆ硶鍙堣鍙栨ā錛岃屼笖鏁版嵁閮藉緢澶э紝瑙夊緱娌℃湁鍔炴硶鍏ユ墜錛屽氨璺寵繃浜嗐傝禌鍚庯紝鍙戠幇鏄彲浠ユ瀯閫犵煩闃靛仛-_-||| 鍞夛紝琚鐩粰鐨勫叕寮忛檺鍒朵簡鎬濊礬鍟娿傘傘?br>
璁?An = (-q)^n
Sn = sigma ( Ai )錛宨 = 0, 1,..., n | Sn | = | 1, 1 | * | Sn-1 |
| An+1| | 0, -q | | An |
Sn = ( 1 - ( -q )^n ) / ( 1 + q )
鍒?f( n ) = | S(n-1) |錛?娉ㄦ剰鏄粷瀵瑰肩殑S(n-1)錛屽洜涓洪鐩腑鐨刦( n ) 鏄竴涓鏁幫紝灝辨槸鍥犱負榪欓噷娌″紕娓呮WA浜嗕竴嬈°?br> 浠ヤ笅鏄垜鐨勪唬鐮侊細
// | Sn | = | 1, 1 | * | Sn-1 |
// | An+1 | | 0, -q | | An |
#include<iostream>
using namespace std;
typedef __int64 ll;
ll p;
ll pow_mod( ll a, ll n, ll z1 )
{
ll ans = 1, d = a % p;
while( n )
{
if( n & 1 ) ans = ( ans * d ) % p;
d = ( d * d ) % p;
n >>= 1;
}
ans = ( ans + z1 ) % p;
ans = ( p - ans ) % p;
return ans;
}
void matrix_mod( ll a[][2], ll b[][2] )
{
ll c[2][2];
int i, j, k;
memset( c, 0, sizeof( c ) );
for( k = 0; k < 2; k++ )
for( i = 0; i < 2; i++ )
for( j = 0; j < 2; j++ )
c[k][i] += a[k][j] * b[j][i];
for( i = 0; i < 2; i++ )
for( j = 0; j < 2; j++ )
a[i][j] = c[i][j] % p;
}
ll Mod( ll x1, ll y1, ll z1, ll y2, ll z2 )
{
int i, j, k;
ll q = pow_mod( x1, y1, z1 );
ll a[2][2], I1[2][2], I2[2][2];
a[0][0] = 1, a[0][1] = 1, a[1][0] = 0, a[1][1] = q;
I1[0][0] = 1, I1[0][1] = 0, I1[1][0] = 0, I1[1][1] = 1;
while( z2 )
{
if( z2 & 1 ) matrix_mod( I1, a );
matrix_mod( a, a );
z2 >>= 1;
}
a[0][0] = 1, a[0][1] = 1, a[1][0] = 0, a[1][1] = q;
I2[0][0] = 1, I2[0][1] = 0, I2[1][0] = 0, I2[1][1] = 1;
for( i = 0; i < y2; i++ )
{
matrix_mod( I2, a );
matrix_mod( a, a );
}
memset( a, 0, sizeof( a ) );
for( i = 0; i < 2; i++ )
for( j = 0; j < 2; j++ )
for( k = 0; k < 2; k++ )
a[i][j] += I1[i][k] * I2[k][j];
for( i = 0; i < 2; i++ )
for( j = 0; j < 2; j++ )
a[i][j] %= p;
return ( a[0][0] + a[0][1] * q ) % p;
}
int main( )
{
ll x1, y1, z1, y2, z2;
ll ans;
while( 1 )
{
scanf("%I64d%I64d%I64d",&x1,&y1,&z1);
if( x1 == -1 && y1 == -1 && z1 == -1 )break;
scanf("%I64d%I64d%I64d",&y2,&z2,&p);
ans = Mod( x1, y1, z1, y2, z2 );
if( ( y2 == 0 && z2 % 2 == 1 ) || ( y2 != 0 && z2 % 2 == 0 ) )
ans = p - ans;
printf("%I64d\n",ans);
}
return 0;
}