Pagini recente » Cod sursa (job #1683920) | Profil StoicaRobert | Cod sursa (job #1332938) | Cod sursa (job #1746192) | Cod sursa (job #643066)
Cod sursa(job #643066)
#include<stdio.h>
#include<unistd.h>
#include<math.h>
#include<string.h>
#define M 1000000
#define q 9973
char vect[M];
int P[M];
int cP=0;
void eratostene() {
int cur_pos = 2;
int i;
int k=0;
while( cur_pos <= M) {
P[k++]=cur_pos;
for( i = cur_pos*2; i<= M; i+=cur_pos){
vect[i] = 0;
}
cur_pos++;
while(vect[cur_pos] == 0 && cur_pos <= M) {
cur_pos++;
}
}
cP=k;
}
void sol(long long num, FILE* file){
long long i;
long long count, sum;
long long max_pow_c;// return the max pow from the prime num decomposition
long long max_pow_r;//ret the mux num from the prime num decomposition
count = 1;
sum = 1 ;
long long num_stop;
num_stop=num;
for(i = 0; i <= cP && ((long long )P[i]*P[i]) <= num_stop; i++) {
if (num % P[i] == 0){
max_pow_c = 1;
max_pow_r = (long long ) P[i];
while(num % P[i] == 0) {
max_pow_c++;
max_pow_r = (max_pow_r*(long long )P[i]);
num /= P[i];
}
// printf("num %lld i %lld\n", num, (long long ) P[i]);
count*=max_pow_c;
sum = (sum * (((max_pow_r - 1)/((long long )P[i] - 1))%q))%q;
}
}
//prime numbers
if(num > 1) {
count*=2;
sum = (sum*((num+1)%q))%q;
num/=num;
}
//write the count and sum to file
fprintf(file, "%lld %lld\n", count, sum);
}
int main(){
int t;
long long num, i;
FILE* fin = fopen("ssnd.in", "r");
FILE* fout = fopen("ssnd.out", "w");
memset(vect, 1, M*sizeof(char));
eratostene();
printf("eratostene reslt\n");
for(i = 0; i < 13; i++) {
printf(" %d", (int) vect[i]);
}
printf("\n");
fscanf(fin, "%d\n", &t);
for(i = 0; i < t; i++){
fscanf(fin, "%lld\n", &num);
// printf("A citit %lld si cauta solutia\n", num);
sol(num, fout);
}
fclose(fin);
fclose(fout);
return 0;
}