#include<stdio.h>
main()
{
int t,n,x,i,j=1,s;
scanf("%d",&t);
while(t--){
scanf("%d %d",&n,&x);
for(i=1;i<=n;i++){
s=i%x;
j=j*s;
}
printf("%d\n",j%x);
j=1;
}
}
Asked by: Deepak_Shaw_Shaw on April 7, 2019, 6:34 p.m. Last updated on April 7, 2019, 6:34 p.m.
First thing you need to do is , instead of takind mod of final value of j , you need to mod of value of j each time it is calculated in your for loop.
for(i=1;i<=n;i++)
{
s=i%x;
j=(j*s)%x;
}
Since max value of n can be 10^9, so to optimise your code ,you should come out of your for loop as soon as j = 0 using break statement.
for(i=1;i<=n;i++)
{
s=i%x;
j=(j*s)%x;
if(j==0)
break;
}
In this question you need to calculate charity .
Charity is zero when j = 0 and when j != 0 Charity is equal to x - j .