zoukankan      html  css  js  c++  java
  • 济南学习 Day2 T1 am

    T1

    题意:从1− n中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数

    最大可能是多少.

    解析:

    1、  质因数分解

    2、  1->n用质因数指数的相加的形式将1*n累乘起来

    3、  扫一遍指数为奇数的质因数都-1,偶数的不变

    4、  快速幂乘一遍,同时取模

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define ll long long
     5 #define mod 100000007
     6 using namespace std;
     7 const int N=5e8+10;
     8 int prime[N],tot,n;
     9 bool check[N];
    10 void pre()
    11 {
    12     for(int i=2;i<=n;i++)
    13     {
    14         if(!check[i]) prime[++tot]=i;
    15         for(int j=1;j<=tot&&prime[j]*i<=n;j++)
    16         {
    17             check[prime[j]*i]=1;
    18             if(i%prime[j]==0) break;
    19         } 
    20             
    21     }
    22 }
    23 int main()
    24 {
    25     scanf("%d",&n);
    26     pre();
    27     memset(check,false,sizeof check );
    28     for(ll res,i=1;i<=tot;i++)
    29     {
    30         res=0;
    31         for(ll j=prime[i];j<=n;j*=(ll)prime[i]) res+=n/j;
    32         if(res&1) check[prime[i]]=1; 
    33     }
    34     ll ans=1;
    35     for(int i=2;i<=n;i++) 
    36       if(!check[i]) ans=ans*i%mod;
    37     printf("%I64d",ans);
    38     return 0;
    39 }
  • 相关阅读:
    Android开发环境搭建
    Noi 2016
    [二分图&最小割]
    [BZOJ 3145][Feyat cup 1.5]Str 解题报告
    [动态图]
    [组合数取模][中国剩余定理]
    [BZOJ 4436][Cerc2015]Kernel Knights
    [NOI 2014]做题记录
    [线段树合并]
    [树套树模板]
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6035706.html
Copyright © 2011-2022 走看看