|
发表于 2022-1-2 21:56:10
|
显示全部楼层
- /*
- 答案:983
- 耗时:0.0230429秒(单核)
- 0.00499988秒(八核)
- */
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <omp.h>
- using namespace std;
- int getCycleLen(int n)//求出数n的循环节长度
- {
- vector<int> vC;
- int r = 1;
- vector<int>::iterator itr;
- while (r > 0)
- {
- r = r % n;
- itr = find(vC.begin(), vC.end(), r);
- if (itr != vC.end())
- break;
- vC.push_back(r);
- r *= 10;
- }
- if (r == 0)
- return 0;
- int k = int(vC.end() - itr);
- return k;
- }
- int main(void)
- {
- volatile int nMaxLen = 0, nVal = 0;
- #pragma omp parallel for shared(nMaxLen,nVal) schedule(dynamic)
- for (int i = 1; i < 1000; ++i)
- {
- int k = getCycleLen(i);
- if (k > nMaxLen)
- {
- #pragma omp critical
- {
- nMaxLen = k;
- nVal = i;
- }
- }
- }
- cout << nVal << endl;
- return 0;
- }
复制代码 |
|