Cod sursa(job #2613348)

Utilizator michael_blazemihai mihai michael_blaze Data 9 mai 2020 16:12:00
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <cmath>
using namespace std;

const int MOD = 9973;

void invers_modular(long long a, int b, int& inv, int& alt) {
	if (!b) {
		inv = 1;
		alt = 0;
	} else {
		int x0, y0;
		invers_modular(b, a % b, x0, y0);
		inv = y0;
		alt = x0 - a / b * y0;
	}
}

int main() {
	freopen("ssnd.in", "r", stdin);
	freopen("ssnd.out", "w", stdout);

	int t;
	long long n;

	cin >> t;

	while (t --) {
		cin >> n;

		long long suma = 0;
		int numarDiv = 0;

		long long i;
		for (i = 1;i * i < n;i ++) {
			if (n % i == 0) {
				suma = (suma + i) % MOD;

				int tempImp, temp;

				invers_modular(i, MOD, tempImp, temp);

				
				tempImp %= MOD;

				if (tempImp < 0)
					tempImp += MOD;
				
				suma = (suma + n * tempImp) % MOD; 

				suma = (suma + n / i) % MOD;

				numarDiv += 2;
			}
		}

		if(i * i == n) {
			suma = (suma + i) % MOD; 

			if (suma < 0)
				suma += MOD;

			numarDiv ++;
		}


		cout << numarDiv << ' ' << suma << '\n';
	}

	return 0;
}