1. 程式人生 > >【Wannafly Daily】20170423 Product it again

【Wannafly Daily】20170423 Product it again

https://cn.vjudge.net/contest/158362#problem/O

考慮每個質數的貢獻
目測不用線性篩也能過

#include<stdio.h>
#include<algorithm>
using namespace std;
#define lim 10000000
#define Int inline int
#define mod 1000000007
typedef long long ll;

bool vis[lim+5];
int pri[664580],ed,T,n,m;

Int pow(int a,int b)
{
    int rt=1;
    for
(;b;a=(ll)a*a%mod,b>>=1) if (b&1) rt=(ll)rt*a%mod; return rt; } Int get(int p) { int rt=0; for (ll i=p;i<=min(n,m);i*=p) rt=(rt+(ll)(n/i)*(m/i))%(mod-1); return rt; } int main() { for (int i=2;i<=lim;i++) { if (!vis[i]) pri[++ed]=i; for (int j=1
;j<=ed && i*pri[j]<=lim;j++) { vis[i*pri[j]]=1; if (i%pri[j]==0) break; } } scanf("%d",&T); while (T--) { scanf("%d%d",&n,&m); int rt=1; for (int i=1;i<=ed && pri[i]<=min(n,m);i++) rt=(ll)rt*pow
(pri[i],get(pri[i]))%mod; printf("%d\n",rt); } }