Pagini recente » Cod sursa (job #616337) | Cod sursa (job #2395299) | Cod sursa (job #2472689) | Cod sursa (job #2982318) | Cod sursa (job #419638)
Cod sursa(job #419638)
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
void gen();
void read();
void calc();
void write();
bool pr[1005];
char a[1005];
long b[26],p[1005],mx;
long long c[1005],d[1005];
int size;
int main() {
gen();
read();
calc();
write();
return 0;
}
void gen() {
int i,j,t=0;
p[0]=2;
for (i=3;i<=1000;i+=2) {
if (!pr[i]) {
p[++t]=i;
for (j=i*i;j<=1000;j+=i<<1)
pr[j]=1;
}
}
pr[2]=0;
}
void read() {
ifstream fin("ordine.in");
fin>>a;
size=strlen(a);
for (int i=0;i<size;++i) {
b[a[i]-'a']++;
}
fin.close();
}
void calc() {
int aux,i,j,l,init;
for (i=2;i<=size;++i) {
aux=i;
init=aux;
if (!pr[aux] && (aux%2==1 || aux==2)) {
for (j=0;p[j]!=aux;++j);
++c[j];
if (j>mx)
mx=j;
}
else
for (j=0;p[j]<=init/2 && aux!=1;++j)
while (aux%p[j]==0) {
aux/=p[j];
++c[j];
if (j>mx)
mx=j;
}
}
int aux2;
for (i=0;i<26;++i) {
aux=b[i];
if (aux>1)
for (l=2;l<=aux;++l) {
aux2=l;
init=aux;
if (!pr[aux2] && (aux2%2==1 || aux2==2)) {
for (j=0;p[j]!=aux2;++j);
++d[j];
}
else
for (j=0;p[j]<=init/2 && aux2!=1;++j)
while (aux2%p[j]==0) {
aux2/=p[j];
++d[j];
}
}
}
}
void write() {
ofstream fout("ordine.out");
int i;
for (i=0;i<=mx;++i)
if (c[i]-d[i]>0)
fout<<p[i]<<' '<<c[i]-d[i]<<'\n';
fout.close();
}