Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- #define NR_E 1000000
- char v[NR_E];
- int main()
- {
- int n,k,cnr,poz,d,cnt,max1,i,aux,nr,cnt1;
- FILE *fin,*fout;
- fin=fopen("divizori.in","r");
- fscanf(fin,"%d%d",&n,&k);
- 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)){
- 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];
- i--;
- v[i]=0;
- }
- }
- d=2;
- cnt=2;
- while(d*d<nr){
- if(nr%d==0)
- cnt+=2;
- d++;
- }
- if(d*d==nr)
- cnt++;
- if(cnt>max1){
- max1=cnt;
- cnr=nr;
- }else if(cnt==max1 && nr<cnr){
- cnr=nr;
- }
- 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