Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- #define NR_E 1000000
- #define M_CIUR 40001
- #define NR_PRIME 4300
- char v[NR_E],ciur[M_CIUR];
- int nrp[NR_PRIME];
- int main()
- {
- int n,k,cnr,poz,d,cnt,max1,i,aux,nr,cnt1,j,n2,rp,cdnr;
- FILE *fin,*fout;
- fin=fopen("divizori.in","r");
- fscanf(fin,"%d%d",&n,&k);
- for(i=2;i<M_CIUR;i++){
- if(ciur[i]==0){
- for(j=i*i;j<M_CIUR;j+=i)
- ciur[j]=1;
- }
- }
- n2=0;
- for(i=2;i<M_CIUR;i++){
- if(ciur[i]==0){
- nrp[n2]=i;
- n2++;
- }
- }
- fgetc(fin);
- for(i=0;i<n;i++)
- v[i]=fgetc(fin)-'0';
- fclose(fin);
- for(i=0;i<=n/2;i++){
- aux=v[n-1-i];
- v[n-1-i]=v[i];
- v[i]=aux;
- }
- cnr=999999999;
- max1=0;
- cnt1=0;
- while((n>1)||(v[0]!=2 && v[0]!=1)){
- nr=0;
- if(n-k>=0){
- for(i=n-1;i>=n-k;i--){
- nr=nr*10+v[i];
- v[i]=0;
- }
- }else{
- i=n-1;
- while(i>=0){
- nr=nr*10+v[i];
- v[i]=0;
- i--;
- }
- }
- d=0;
- cnt=1;
- cdnr=nr;
- while(nr>1){
- rp=0;
- while(nr%nrp[d]==0){
- nr/=nrp[d];
- rp++;
- }
- cnt*=(rp+1);
- d++;
- if(nrp[d]*nrp[d]>nr){
- if(nr!=1)
- cnt*=2;
- nr=1;
- }
- }
- if(cnt>max1){
- max1=cnt;
- cnr=cdnr;
- }else if(cnt==max1 && cdnr<cnr){
- cnr=cdnr;
- }
- nr=cnt;
- if(n-k>=0){
- poz=n-k;
- while(nr>0){
- v[poz]=nr%10;
- poz++;
- nr/=10;
- }
- n=n-(k-(poz-(n-k)));
- }else{
- n=0;
- while(nr>0){
- v[n]=nr%10;
- n++;
- nr/=10;
- }
- }
- cnt1++;
- }
- fout=fopen("divizori.out","w");
- fprintf(fout,"%d\n%d\n%d",cnt1+1,max1,cnr);
- fclose(fout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement