1. 程式人生 > >找平方數

找平方數

clas prime vector rime blog div spa fin void

從1——n,中找若幹個數相乘,求能得到的最大平方數

#include<iostream>
#include<queue>
#include<vector>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define P 100000007
long long n,ans,t;
int prime[8000000],cnt;
int sum[8000000];
bool is[8000000];
void first()
{    
    for(int i=2;i<=n+100
;i++) { if(!is[i]) prime[++cnt]=i; for(int j=1;j<=cnt;j++) { if(i*prime[j] >=n+100) break; is[i*prime[j]]=1; if(i%prime[j] ==0) break; } } return; } int main() { freopen("hao.in","r",stdin); freopen(
"hao.out","w",stdout); cin>>n; first(); for(int i=1;i<=cnt;i++) { t=prime[i]; while(t<=n) { sum[i]+=n/t; t=t*prime[i];//想是這樣想的,但打錯了變量 慎重 } } ans=1; for(int i=1;i<=cnt;i++) if(sum[i]>=2) { sum[i]
=sum[i]/2; for(int j=1;j<=sum[i];j++) ans=(ans*1LL*prime[i]*prime[i])%P; } cout<<ans<<endl; return 0; }

找平方數