从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; }