< Back to forum

#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.


Enter your answer details below:


Preview

Enter your comment details below:

Preview




1 Answer(s)

avatar

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 .

 

Raghav_Grover last updated on April 7, 2019, 6:34 p.m. 0    Reply    Upvote   

Instruction to write good question
  1. 1. Write a title that summarizes the specific problem
  2. 2. Pretend you're talking to a busy colleague
  3. 3. Spelling, grammar and punctuation are important!

Bad: C# Math Confusion
Good: Why does using float instead of int give me different results when all of my inputs are integers?
Bad: [php] session doubt
Good: How can I redirect users to different pages based on session data in PHP?
Bad: android if else problems
Good: Why does str == "value" evaluate to false when str is set to "value"?

Refer to Stack Overflow guide on asking a good question.