您的位置:首页 > 其它

UVA 11440 Help Tomisu

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

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: