CRYPTO1 - The Bytelandian Cryptographer (Act I)

no tags 

The infamous Bytelandian Bit-eating Fanatic Organisation (BBFO for short) plans to launch an all-out denial-of-service attack on the Bytelandian McDecimal's fast food network by blocking the entrance to every restaurant with a camel (the purpose being to rid the Organisation of unhealthy competition, obviously). In a sly and perfidious move, the head cryptographer of BBFO decided to disclose the date and time of the planned attack to the management of McDecimal's, but in encrypted form (ha ha). He calculated the number of seconds from midnight 1970.01.01 GMT to the moment of attack, squared it, divided it by 4000000007 and sent the remainder by e-mail to McDecimal's. This made the original date impossible to decode.

Or did it?

*   *   *

You work as the head algorthimist at McDecimal's HQ and know nothing of what is happening in Byteland. Things are not going well. You are playing a quiet game of hearts against your computer and wondering why on earth Management are considering making you redundant. Suddenly, the CEO bursts into your office, saying:

- Look here, young man[lady]! I have this number and those guys claim it is supposed to be some date. I am giving you one second to tell me what it all means!

I am afraid you have no choice. You can't ask any further questions.
You just have to answer, now.


The encrypted timestamp.


The decrypted GMT time and date of attack, somewhere between 1970 and 2030, using standard 26 character formatting.



Sun Jun 13 16:20:39 2004

hide comments
pavan26: 2017-03-02 04:01:42

Use Fermat's Little Theorem but with some manipulation . Try to relate quadratic residues with the theorem.
AC in one go finally.

coolrohan123: 2016-12-28 19:42:45

took me 5 hours to solve this.. But happy :)

Ishwar: 2016-12-04 07:46:21

elliptic curve cryptography, there you go!!

qlstudio: 2016-06-05 16:29:49

The total offset between 1970 and 2030 is 1893456000 seconds. Why in the world is he dividing the result by 4000000007? If x<y, x mod y = x. So I did time.asctime(time.localtime(<timestamp>)). WRONG!

Last edit: 2016-06-05 16:37:34
kethansrinivas: 2016-04-30 15:53:06

four WA for changing code due to strftime displaying wrong output as Sun Jun 13 21:50:39 2004 instead of Sun Jun 13 16:20:39 2004 but got AC when submitted the code for 1st output without any changes in spoj. Its weird how there are differences in output of same code between my compiler and spoj.

mike: 2015-12-07 16:47:35

Be aware of format of time and avoid spelling mistakes of (Thu, Sep ,..etc)..that costed me 2 WA

Last edit: 2016-01-13 18:12:51
Shubham Dash: 2015-12-07 15:21:09

Easy in python

python_user: 2015-10-31 05:35:52

make sure that you use unsigned long long as the data type for the variables!!

Last edit: 2015-10-31 05:36:21
skrishna99: 2015-07-25 06:06:16

can we use tonelli shanks algorithm for this? or any different algorithm is there?

Parth: 2015-05-14 22:16:23

Nice Question !!
Learned modular arithmetic (quadratic congruence)!!

Added by:adrian
Time limit:1s
Source limit:10000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: NODEJS PERL6 VB.NET