The batsmen shared 219 runs for the second wicket off just 168 balls to help India post an imposing 375-5 after the visitors elected to bat at the R. Premadasa stadium.
Sri Lanka barely put up a fight after losing four early wickets for 68 runs, folding up for 207 in 42.4 overs.
Angelo Mathews top-scored with 70 in what was Sri Lanka’s biggest defeat in terms of runs in an ODI on home soil.
“We spoke about not being complacent at any stage,” said Kohli, named man-of-the-match.
“It was a clinical performance today. We wanted to bat first because we hadn’t batted first in the three games. The surface was amazing. It was a good toss to win.”
Debutant Shardul Thakur gave India the first breakthrough when he had opener Niroshan Dickwella caught by Mahendra Singh Dhoni, playing his 300th one-day-international.
The batsman was given not-out by the on-field umpire but India decided to review the decision and TV replays showed the ball had brushed the bat.
Sri Lanka could never really recover from the early blow and failed to build the partnerships which were needed to chase the imposing target.
The highlight of the game was the partnership between Kohli and Sharma.
Kohli hit 17 fours and two sixes in his enthralling 131-run knock that came off just 96 balls.
Sharma (104) hammered 11 fours and three sixes in an equally entertaining 88-ball innings, his second century in a row.
Malinga takes 300th wicket
Kohli was dismissed by Sri Lanka’s stand-in captain Lasith Malinga who completed 300 Test wickets, the 13th bowler overall and fourth Sri Lankan to achieve the feat.
“300th wicket is just a number. I’m happy (for this record) but we lost which is very unfortunate,” said Malinga.
“It’s not been easy.... Young players want to perform well, they’re all excited but we haven’t been able to come up with our best.
“They need the experience. Hopefully they will do their best over the next few months.”
Sri Lanka have been struggling to put up a decent fight in the series, with injuries to key players, selection woes and hostile fans compounding their misery.
The islanders, ranked eighth to India’s third, have copped criticism for going down to bottom-ranked Zimbabwe in an ODI series followed by a 3-0 Test whitewash against India on home soil.
Angry fans lobbed bottles and other objects after Sri Lanka lost the third game in Pallekele to India on Sunday.
The Indians were off to a flying start yesterday, thanks to Kohli and Sharma.
Kohli reached his 29th ODI century off just 76 balls with a boundary off Milinda Siriwardana to the square-leg fence as he toyed with the bowling attack.
Mathews put the brakes on the scoring when he dismissed Hardik Pandya (19) and Sharma off consecutive balls.
Dhoni, who made 49 not out, became only the sixth Indian and the second wicketkeeper-batsman after Kumar Sangakkara to play 300 ODIs.
He also shared 101 runs with Manish Pandey (50 not out) after the visitors were reduced to 274-5.
Butter-fingered Sri Lanka dropped easy catches and misfielded often to allow some easy runs to the Indians.
The fifth and final one-dayer will be played in Colombo on Sunday.
R. Sharma c Dickwella b Mathews 104
S. Dhawan c Pushpakumara b Fernando 4
V. Kohli c Munaweera b Malinga 131
H. Pandya c de Silva b Mathews 19
L. Rahul c de Silva b Dananjaya 7
M. Pandey not out 50
M.S. Dhoni not out 49
Extras (b5, w6) 11
Total (for 5 wkts; 50 overs) 375
Fall of wickets: 1-6 (Dhawan), 2-225 (Kohli), 3-262 (Pandya), 4-262 (Sharma), 5-274 (Rahul)
Bowling: Malinga 10-0-82-1, Fernando 8-1-76-1, Mathews 6-2-24-2, Pushpakumara 9-0-65-0, Dananjaya 10-0-68-1, de Silva 2-0-19-0, Siriwardana 5-0-36-0
N. Dickwella c Dhoni b Thakur 14
D. Munaweera c Dhoni b Bumrah 11
K. Mendis run out 1
L. Thirimanne c Dhawan b Pandya 18
A. Mathews c Thakur b Patel 70
M. Siriwardana c Dhoni b Pandya 39
H. de Silva run out 22
A. Dananjaya not out 11
M. Pushpakumara c Pandya b Bumrah 3
V. Fernando c and b Yadav 5
L. Malinga b Yadav 0
Extras (lb1, w12) 13
Total (all out; 42.2 overs) 207
Fall of wickets: 1-22 (Dickwella), 2-26 (Mendis), 3-37 (Munaweera), 4-68 (Thirimanne), 5-141 (Siriwardana), 6-177 (de Silva), 7-190 (Mathews), 8-196 (Pushpakumara), 9-207 (Fernando), 10-207 (Malinga).
Bowling: Thakur 7-0-26-1, Bumrah 7-0-32-2, Pandya 8-0-50-2, Kohli 2-0-12-0, Yadav 8.4-1-31-2, Patel 10-0-55-1