Advertisement
Patrickmeme

Divizori

Jan 22nd, 2023
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. #define NR_E 1000000
  5. char v[NR_E];
  6. int main()
  7. {
  8.     int n,k,cnr,poz,d,cnt,max1,i,aux,nr,cnt1;
  9.     FILE *fin,*fout;
  10.     fin=fopen("divizori.in","r");
  11.     fscanf(fin,"%d%d",&n,&k);
  12.     fgetc(fin);
  13.     for(i=0;i<n;i++)
  14.         v[i]=fgetc(fin)-'0';
  15.     fclose(fin);
  16.     for(i=0;i<=n/2;i++){
  17.         aux=v[n-1-i];
  18.         v[n-1-i]=v[i];
  19.         v[i]=aux;
  20.     }
  21.     cnr=999999999;
  22.     max1=0;
  23.     cnt1=0;
  24.     while((n>1)||(v[0]!=2)){
  25.         nr=0;
  26.         if(n-k>=0){
  27.             for(i=n-1;i>=n-k;i--){
  28.                 nr=nr*10+v[i];
  29.                 v[i]=0;
  30.             }
  31.         }else{
  32.             i=n-1;
  33.             while(i>=0){
  34.                 nr=nr*10+v[i];
  35.                 i--;
  36.                 v[i]=0;
  37.             }
  38.         }
  39.         d=2;
  40.         cnt=2;
  41.         while(d*d<nr){
  42.             if(nr%d==0)
  43.                 cnt+=2;
  44.             d++;
  45.         }
  46.         if(d*d==nr)
  47.             cnt++;
  48.         if(cnt>max1){
  49.             max1=cnt;
  50.             cnr=nr;
  51.         }else if(cnt==max1 && nr<cnr){
  52.             cnr=nr;
  53.         }
  54.         nr=cnt;
  55.         if(n-k>=0){
  56.             poz=n-k;
  57.             while(nr>0){
  58.                 v[poz]=nr%10;
  59.                 poz++;
  60.                 nr/=10;
  61.             }
  62.             n=n-(k-(poz-(n-k)));
  63.         }else{
  64.             n=0;
  65.             while(nr>0){
  66.                 v[n]=nr%10;
  67.                 n++;
  68.                 nr/=10;
  69.             }
  70.         }
  71.         cnt1++;
  72.     }
  73.     fout=fopen("divizori.out","w");
  74.     fprintf(fout,"%d\n%d\n%d",cnt1+1,max1,cnr);
  75.     fclose(fout);
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement