题目
Bi-shoe and Phi-shoe
https://vjudge.net/problem/LightOJ-1370
一个简单的欧拉筛就完事啦!
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define ll long long
#define bug(x) cout << #x << " == " << x << '\n'
const ll int MAX_N=1e8+5;
bool prime[MAX_N]={0};
ll isp[MAX_N]={0};
ll tot=0;
inline void ols(ll n)///欧拉筛
{
fill(prime+1,prime+1+n,true);
for(int i=2;i<=n;i++)
{
if(prime[i])
{
tot++;
isp[tot]=i;
}
for(int j=1;j<=tot&&i*isp[j]<=n;j++)
{
prime[i*isp[j]]=false;
if(i%isp[j]==0)break;
}
}
}
int main()
{
ols(1e6+10);
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
int n;
ll sum=0;
scanf("%d", &n);
while(n--)
{
ll x;
scanf("%lld",&x);
ll k=upper_bound(isp+1,isp+1+tot,x)-isp;
sum+=isp[k];
}
printf("Case %d: %lld Xukha\n",i,sum);
}
}
唯一分解定理
求C(p,q)/C(r,s);
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define ll unsigned long long
#define bug(x) cout << #x << " == " << x << '\n'
const ll int MAX_N=1e4+100;
#define INF 0x3f3f3f3f
bool isp[MAX_N]={0};
ll prime[MAX_N];
int cl[MAX_N]={0};
int tot=0;
inline void ppp(int n)
{
for(ll i=2;i<=n;i++)
{
if(!isp[i])
{
tot++;
prime[tot]=i;
}
for(ll j=1;j<=tot&&prime[j]*i<=n;j++)
{
isp[prime[j]*i]=1;
if(i%prime[j]==0)break;
}
}
}
inline void get_prime_facter(ll a,int d)
{
for(int i=1;i<=tot;i++)
{
if(a%prime[i]==0)
{
while(a%prime[i]==0)
{
a/=prime[i];
cl[i]+=d;
}
}
if(a==1)
break;///所有的质因数都被找到啦(⊙o⊙)
}
}
inline void add_factor(ll n,int d)
{
for(ll i=1;i<=n;i++)
{
get_prime_facter(i,d);
}
}
int main( )
{
ll p,q,r,s;
ppp(1e4);
while(scanf("%lld %lld %lld %lld", &p, &q, &r, &s)!=EOF)
{
memset(cl,0,sizeof(cl));
add_factor(p,1);
add_factor(q,-1);
add_factor(p-q,-1);
add_factor(r,-1);
add_factor(s,1);
add_factor(r-s,1);
double ans1=1;
for(int i=1;i<=tot;i++)
{
ans1*=pow(prime[i],cl[i]);
}
printf("%.5lf\n",ans1);
}
}