UVA 11440 Help Tomisu

来源:互联网 发布:淘宝网天猫童鞋 编辑:程序博客网 时间:2024/05/16 18:17

有一定难度的一道题目,具体的思路和紫书相同,设计到素数的统计以及欧拉函数的使用以及后续的递推计算,具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>#include<functional>using namespace std;const int maxn = 10000000 + 10;long long phi[maxn];bool prime[maxn];const int MOD = 100000007;void Init(int t){memset(prime,1,sizeof(prime));int up = floor(sqrt(t) + 0.5);for (int i = 2; i <= up; i++){if (prime[i]){for (int j = i*i; j <= t; j += i)prime[j] = 0;}}phi[1] = phi[2] = 1;for (int i = 3; i <= 10000000; i++){phi[i] = (long long)phi[i - 1] * (prime[i] ? (i - 1) : i)%MOD;}}int main(){Init(10000000);int n, m;while (cin >> n >> m){if (n == 0 && m == 0) break;int ans = phi[m];for (int i = m + 1; i <= n; i++) ans = (long long)ans*i%MOD;cout << ans-1 << endl;}return 0;}

原创粉丝点击