1 条题解
-
0
C++ :
//#include "stdafx.h" #include <string> //#include <fstream> #include <algorithm> #include <vector> #include <map> #include <iostream> #include <time.h> #include <cmath> using namespace std; const int M = 1e8; ; const int NN = 1e4; const int KK = 10000007; int prime[NN + 1]; int vis[NN + 1] = { 0 }; int nLen = 0; void findPrime(int N) { int m = (int)sqrt(N + 0.0); for (int i = 2; i <= m; i++) { if (vis[i] == 0) { for (int j = i*i; j <= m; j += i) { vis[j] = 1; } } } for (int n = 2; n <= m; n++) { if (vis[n] == 0) { prime[nLen++] = n; } } } class RunTime { clock_t start, end; public: RunTime() { start = clock(); } ~RunTime() { end = clock(); double dur = (double)(end - start); printf("Use Time:%f\n", (dur / CLOCKS_PER_SEC)); } }; int calcTime(int n, int m, int ×) { times = 0; while (n %m == 0) { times++; n /= m; } return n; } int Solve(int n) { int sum = 1; int times; int k = (int)sqrt(n + 0); for (int i = 0; i < nLen; i++) { if (prime[i] > k) { break; } if (n % prime[i] == 0) { n = calcTime(n, prime[i], times); sum = sum * (1 + 2 * times);// % KK; } if (prime[i] > n) { break; } } if (n != 1) sum *= 3; return (sum - 1) / 2; } int main() { //ifstream fin("data.txt");//数据都放在data.txt //RunTime obj; findPrime(M);//找出素数 //cout << nLen << endl; //cout << sizeof(vis) << endl; int n, d; while (cin >> n) { d = Solve(n); cout << d << endl; } return 0; }
- 1
信息
- ID
- 3551
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者