from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.rank
if rank == 0:
noOfIterations = int(input("Enter number of iterations : "))
noOfProcesses = int(input("Enter number of processes to spawn : "))
iterationsPerProcess = noOfIterations // noOfProcesses
ss=0
else:
noOfIterations = None
noOfProcesses = None
iterationsPerProcess = None
ss=None
def calcPi()->float:
n = comm.bcast(noOfIterations, root = 0)
p = comm.bcast(noOfProcesses, root = 0)
i = comm.bcast(iterationsPerProcess, root = 0)
s = comm.bcast(ss, root = 0)
k = (2*rank)+1
flag=False
if p%2 == 0:
if rank %2 == 0:
for x in range(i):
s+=4/k
k = k+(2*p)
else:
for x in range(i):
s-=4/k
k = k+(2*p)
else: ########## here #########
if rank %2 == 0:
for x in range(i):
if flag == False:
s+=4/k
else:
s-=4/k
flag = not flag
k = k+(2*p)
else:
for x in range(i):
if flag == False:
s-=4/k
else:
s+=4/k
flag = not flag
k = k+(2*p)
newData = comm.gather(s,root=0)
if rank == 0:
print(newData)
print(sum(newData))
calcPi()
ZnJvbSBtcGk0cHkgaW1wb3J0IE1QSQoKY29tbSA9IE1QSS5DT01NX1dPUkxECnJhbmsgPSBjb21tLnJhbmsKaWYgcmFuayA9PSAwOgogICAgbm9PZkl0ZXJhdGlvbnMgPSBpbnQoaW5wdXQoIkVudGVyIG51bWJlciBvZiBpdGVyYXRpb25zIDogIikpCiAgICBub09mUHJvY2Vzc2VzID0gaW50KGlucHV0KCJFbnRlciBudW1iZXIgb2YgcHJvY2Vzc2VzIHRvIHNwYXduIDogIikpCiAgICBpdGVyYXRpb25zUGVyUHJvY2VzcyA9IG5vT2ZJdGVyYXRpb25zIC8vIG5vT2ZQcm9jZXNzZXMKICAgIHNzPTAKZWxzZToKICAgIG5vT2ZJdGVyYXRpb25zID0gTm9uZQogICAgbm9PZlByb2Nlc3NlcyA9IE5vbmUKICAgIGl0ZXJhdGlvbnNQZXJQcm9jZXNzID0gTm9uZQogICAgc3M9Tm9uZQoKZGVmIGNhbGNQaSgpLT5mbG9hdDoKICAgIG4gPSBjb21tLmJjYXN0KG5vT2ZJdGVyYXRpb25zLCByb290ID0gMCkKICAgIHAgPSBjb21tLmJjYXN0KG5vT2ZQcm9jZXNzZXMsIHJvb3QgPSAwKQogICAgaSA9IGNvbW0uYmNhc3QoaXRlcmF0aW9uc1BlclByb2Nlc3MsIHJvb3QgPSAwKQogICAgcyA9IGNvbW0uYmNhc3Qoc3MsIHJvb3QgPSAwKQogICAgayA9ICgyKnJhbmspKzEKICAgIGZsYWc9RmFsc2UKICAgIGlmIHAlMiA9PSAwOgogICAgICAgIGlmIHJhbmsgJTIgPT0gMDoKICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoaSk6CiAgICAgICAgICAgICAgICBzKz00L2sKICAgICAgICAgICAgICAgIGsgPSBrKygyKnApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoaSk6CiAgICAgICAgICAgICAgICBzLT00L2sKICAgICAgICAgICAgICAgIGsgPSBrKygyKnApICAgICAgIAogICAgZWxzZTogIyMjIyMjIyMjIyBoZXJlICMjIyMjIyMjIwogICAgICAgIGlmIHJhbmsgJTIgPT0gMDoKICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoaSk6CiAgICAgICAgICAgICAgICBpZiBmbGFnID09IEZhbHNlOgogICAgICAgICAgICAgICAgICAgIHMrPTQvawogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzLT00L2sKICAgICAgICAgICAgICAgIGZsYWcgPSBub3QgZmxhZwogICAgICAgICAgICAgICAgayA9IGsrKDIqcCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgeCBpbiByYW5nZShpKToKICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gRmFsc2U6CiAgICAgICAgICAgICAgICAgICAgcy09NC9rCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHMrPTQvawogICAgICAgICAgICAgICAgZmxhZyA9IG5vdCBmbGFnCiAgICAgICAgICAgICAgICBrID0gaysoMipwKQogICAgbmV3RGF0YSA9IGNvbW0uZ2F0aGVyKHMscm9vdD0wKQoKICAgIGlmIHJhbmsgPT0gMDoKICAgICAgICBwcmludChuZXdEYXRhKQogICAgICAgIHByaW50KHN1bShuZXdEYXRhKSkKCmNhbGNQaSgpCg==