Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #define Ull unsigned long long int
- using namespace std;
- int main()
- {
- Ull n;
- int p;
- ifstream f("simonah.in");
- f>>n>>p;
- f.close();
- int c[10]={0},nrc=0,sc=0;
- while(n)
- ++c[n%10],sc+=n%10,++nrc,n/=10;
- if(nrc==1)
- for(int i=1;i<10;++i)
- if(c[i])
- {
- ofstream g("simonah.out");
- g<<i%p;
- g.close();
- return 0;
- }
- Ull pr=1,fct[19]={1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,20922789888000,355687428096000,6402373705728000};
- for(int i=1;i<10;++i)
- if(c[i])
- pr*=fct[c[i]];
- Ull sol=0;
- switch(p)
- {
- case 2:
- for(int i=1;i<10;i+=2)
- if(c[i])
- sol+=fct[nrc-1]*c[i]/pr;
- break;
- case 3:
- sol=sc%3*(fct[nrc]/pr);
- break;
- case 4:
- int r4;
- for(int i=1;i<10;++i)
- if(c[i])
- {
- if(c[i]>1)
- {
- r4=(i*10+i)%4;
- sol+=r4*fct[nrc-2]*c[i]*(c[i]-1)/pr;
- }
- for(int j=i+1;j<10;++j)
- if(c[j])
- {
- r4=(i*10+j)%4;
- sol+=r4*fct[nrc-2]*c[i]*c[j]/pr;
- r4=(j*10+i)%4;
- sol+=r4*fct[nrc-2]*c[i]*c[j]/pr;
- }
- }
- break;
- case 5:
- for(int i=1;i<10;++i)
- if(i!=5)
- if(c[i])
- sol+=((i%5)*fct[nrc-1]*c[i])/pr;
- break;
- }
- ofstream g("simonah.out");
- g<<sol;
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement