0以外ã®ã™ã¹ã¦ã®å®Ÿæ•°ã®é€†æ•°ã¯å®Ÿæ•°ã«ãªã‚Šã¾ã™ãŒã€æ•´æ•°ã®é€†æ•°ãŒæ•´æ•°ã«ãªã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“。C言語ãªã©ã§ 3.0/2.0*2.0 = 3.0 ãªã®ã« 3/2*2 = 2 ã«ãªã£ã¦ã—ã¾ã†ã®ã¯ã“ã®ãŸã‚ã§ã™ã€‚ã§ã™ãŒã€ç´ æ•°ã§å‰²ã£ãŸä½™ã‚ŠãŒç‰ã—ã„æ•´æ•°ã‚’åŒã˜ã‚‚ã®ã¨ã¿ãªã™ã¨ã€0以外ã®ã™ã¹ã¦ã®æ•´æ•°ãŒé€†æ•°ã‚’ã‚‚ã¤ã‚ˆã†ã«ã§ãã¾ã™ã€‚
æ•´æ•° x 㨠y ã‚’ p ã§å‰²ã£ãŸä½™ã‚ŠãŒç‰ã—ã„ã¨ãã€x ≡ y (mod p) ã¨æ›¸ãã¾ã™ã€‚p ãŒç´ æ•°ã®ã¨ãã€ã“ã®ã‚ˆã†ãª x 㨠y ã‚’åŒã˜ã‚‚ã®ã¨ã¿ãªã™ãªã‚‰ã€ã™ã¹ã¦ã®æ•´æ•° n ã¯0ã‹ã‚‰ p−1 ã¾ã§ã®ã©ã‚Œã‹ã®æ•´æ•° x ã«å¯¾ã—㦠x ≡ n (mod p) ã¨ãªã‚‹ã®ã§ã€ã‘ã£ãょã { 0, 1, 2, ..., p−1 } ã¨ã„ã†é›†åˆã ã‘ã‹ã‚‰ãªã‚‹ä¸–界を考ãˆã‚Œã°ã‚ˆã„ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚
ã“ã®ä¸–ç•Œã§ã®åŠ 減乗除ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
ã“ã®ã‚ˆã†ã«ã—ã¦åŠ 減乗除ã®å››å‰‡æ¼”ç®—ãŒã™ã¹ã¦0ã‹ã‚‰p−1ã®ç¯„囲ã«åŽã¾ã‚Šã¾ã™ã€‚ã“ã®ã¨ãã€é›†åˆ { 0,1,...,p−1 } ã‚’ p ã®æœ‰é™ä½“ã¨ã„ã„ã¾ã™ã€‚ã“ã®æœ‰é™ä½“ã®ä¸ã§ã€åŠ 減乗除ã€0 ã‹ã‚‰ p−1 ã¾ã§ã®æ•°ã€ã‚«ãƒƒã‚³ã‚’使ã£ã¦ ç®—è¡“å¼ã‚’構æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
p ã®æœ‰é™ä½“ã® 0 以外ã®ã™ã¹ã¦ã®è¦ç´ ãŒé€†æ•°ã‚’ã‚‚ã¤ã“ã¨ã¯ã€ãƒ•ã‚§ãƒ«ãƒžãƒ¼ã®å°å®šç†ã¨å‘¼ã°ã‚Œã‚‹æœ‰åãªå®šç† ap−1 ≡ 1 (mod p) ã‹ã‚‰ã‚ã‹ã‚Šã¾ã™ï¼ˆãŸã ã—ã€p ã¯ç´ æ•°ã€a 㨠p ã¯äº’ã„ã«ç´ )。p ã®æœ‰é™ä½“ã®ã™ã¹ã¦ã®è¦ç´ x 㯠p ã¨äº’ã„ã«ç´ ãªã®ã§ã€ã“ã®å®šç†ã‹ã‚‰ x*xp-2 ≡ 1 (mod p) ã¨ãªã‚Š xp-2 ㌠x ã®é€†æ•°ã«ãªã‚‹ã‹ã‚‰ã§ã™ã€‚
ã§ã¯ã€ç´ æ•°ã¨å¼ãŒä¸Žãˆã‚‰ã‚ŒãŸã¨ãã«ã€ãã®ç´ æ•°ã®æœ‰é™ä½“ã§å¼ã‚’計算ã™ã‚‹é›»å“プãƒã‚°ãƒ©ãƒ を作æˆã—ã¦ãã ã•ã„。
入力ã¯è¤‡æ•°ã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒƒãƒˆã‹ã‚‰ãªã‚‹ã€‚入力ã®çµ‚ã‚ã‚Šã¯0ã®å¾Œã«ã‚³ãƒãƒ³ãŒï¼‘ã¤ç¶šãã ã‘ã®è¡Œ 0: ã§ç¤ºã•ã‚Œã‚‹ã€‚å„データセットã¯ä»¥ä¸‹ã®å½¢å¼ã§ä¸Žãˆã‚‰ã‚Œã‚‹ã€‚
p:exp
データセットã¯ï¼‘è¡Œã§ã‚ã‚Šã€p (2 ≤ p ≤ 46000) ã¯ç´ æ•°ã€exp ã¯ç®—è¡“å¼ã‚’示ã™ã€‚exp ã¯åŠ 減乗除(ãã‚Œãžã‚Œ +, -, *, /)ã¨ã‚«ãƒƒã‚³ã€0 ã‹ã‚‰ p−1 ã¾ã§ã®æ•°ã‹ã‚‰æ§‹æˆã•ã‚Œã‚‹ã€‚演算åã€æ•°ã€ã‚«ãƒƒã‚³ãªã©ã®å‰å¾Œã«ã¯1ã¤ä»¥ä¸Šã®ç©ºç™½ãŒç¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚る。exp ã®é•·ã•ã¯ 100,000 を超ãˆãªã„。
データセットã®æ•°ã¯ 1000 を超ãˆãªã„。
データセットã”ã¨ã«ã€è¨ˆç®—çµæžœã‚’出力ã™ã‚‹ã€‚出力形å¼ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã‚る。
exp = val (mod p)
val ã¯ã€p ã®æœ‰é™ä½“ã§ã®ç®—è¡“å¼ exp ã®è¨ˆç®—çµæžœã§ã‚る。ãŸã ã—ã€0 ã§ã®é™¤ç®—ãŒå«ã¾ã‚Œã‚‹ã¨ã㯠NG ã¨å‡ºåŠ›ã™ã‚‹ã€‚ã¾ãŸã€exp ã«ç¾ã‚Œã‚‹åŠ 減乗除ã€ã‚«ãƒƒã‚³ã€æ•°ã®å‰å¾Œã«ã¯ç©ºç™½ã‚’空ã‘ãªã„ã“ã¨ã€‚ãŸã ã—ã€= ã®å‰å¾Œã«ã¯ç©ºç™½ã‚’一ã¤ãšã¤ç©ºã‘る。ã¾ãŸã€valã¨é–‹ãカッコã®é–“ã€modã¨p ã®é–“ã«ã‚‚空白を一ã¤ãšã¤ç©ºã‘る。
5: 2 - 3 17: 1 + 3 * (2 + 3 / 5 * 2) + 7 11: 1 / 8 - 5 - 8 * 2 19: 8 / (2 - 3 * 7) 1153: 10 * 3 / 7 + ( 50 + 81 / 22 ) + 11 0:
2-3 = 4 (mod 5) 1+3*(2+3/5*2)+7 = 4 (mod 17) 1/8-5-8*2 = 8 (mod 11) NG 10*3/7+(50+81/22)+11 = 915 (mod 1153)