zoukankan      html  css  js  c++  java
  • 【HDOJ5447】Good Numbers(数论)

    题意:

     思路:From https://blog.csdn.net/qq_36553623/article/details/76683438

    大概就是把1e6里面的质因子能除的都除光之后借助两者gcd中有最大质因子的条件分类讨论

    其实也就5类,重点是如何设分类的标准,其实唯一的标准就是对答案的贡献

    int128本机环境跑不了,只能交上去的时候改,总觉得有朝一日要掉坑里

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 typedef long long ll;
      4 typedef unsigned int uint;
      5 typedef unsigned long long ull;
      6 typedef long double ld;
      7 typedef pair<int,int> PII;
      8 typedef pair<ll,ll> Pll;
      9 typedef vector<int> VI;
     10 typedef vector<PII> VII;
     11 typedef pair<ll,ll>P;
     12 #define N  1000000+10
     13 #define M  200000+10
     14 #define INF 1e9
     15 #define fi first
     16 #define se second
     17 #define MP make_pair
     18 #define pb push_back
     19 #define pi acos(-1)
     20 #define mem(a,b) memset(a,b,sizeof(a))
     21 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
     22 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
     23 #define lowbit(x) x&(-x)
     24 #define Rand (rand()*(1<<16)+rand())
     25 #define id(x) ((x)<=B?(x):m-n/(x)+1)
     26 #define ls p<<1
     27 #define rs p<<1|1
     28 #define fors(i) for(auto i:e[x]) if(i!=p)
     29 
     30 const int MOD=998244353,inv2=(MOD+1)/2;
     31       //int p=1e4+7;
     32       double eps=1e-6;
     33       int dx[4]={-1,1,0,0};
     34       int dy[4]={0,0,-1,1};
     35 
     36 int p[N],b[N];
     37 
     38 int read()
     39 {
     40    int v=0,f=1;
     41    char c=getchar();
     42    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     43    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     44    return v*f;
     45 }
     46 
     47 ll readll()
     48 {
     49    ll v=0,f=1;
     50    char c=getchar();
     51    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     52    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     53    return v*f;
     54 }
     55 
     56 template<class T> void Read(T &x)
     57 {
     58     static int CH;
     59     while((CH=getchar())<'0'||CH>'9');
     60     for(x=CH-'0';(CH=getchar())>='0'&&CH<='9';x=(x<<3)+(x<<1)+(CH-'0'));
     61 }
     62 
     63 int is2(__int128 x)
     64 {
     65     __int128 t=pow(x,1.0/2)+0.5;
     66     if(t*t==x) return 1;
     67     return 0;
     68 }
     69 
     70 int is3(__int128 x)
     71 {
     72     __int128 t=pow(x,1.0/3)+0.5;
     73     if(t*t*t==x) return 1;
     74     return 0;
     75 }
     76 
     77 void calc(ll &ans,__int128 x,__int128 y)
     78 {
     79     if(y==1)
     80     {
     81         if(x==1) ans*=1;
     82          else if(is3(x)) ans*=3;
     83           else if(is2(x)) ans*=2;
     84            else ans*=1;
     85     }
     86      else if(y>1&&is2(y))
     87      {
     88          if(y%x==0) ans*=3;
     89           else ans*=2;
     90      }
     91       else if(x>1&&is2(x))
     92       {
     93           if(x%y==0) ans*=3;
     94            else ans*=2;
     95       }
     96        else if(y%x==0) ans*=2;
     97         else ans*=1;
     98 }
     99 
    100 int main()
    101 {
    102     //freopen("1.in","r",stdin);
    103     //freopen("1.out","w",stdout);
    104     int n=0;
    105     rep(i,2,1e6)
    106     {
    107         if(!b[i]) p[++n]=i;
    108         rep(j,1,n)
    109         {
    110             int t=p[j]*i;
    111             if(t>1e6) break;
    112             b[t]=1;
    113             if(i%p[j]==0) break;
    114         }
    115     }
    116     int cas=read();
    117     while(cas--)
    118     {
    119         __int128 s1,s2;
    120         Read(s1);
    121         Read(s2);
    122         ll ans1,ans2;
    123         ans1=ans2=1;
    124         rep(i,1,n)
    125         {
    126             if(s1%p[i]==0)
    127             {
    128                 int s=0;
    129                 while(s1%p[i]==0)
    130                 {
    131                     s++;
    132                     s1/=p[i];
    133                 }
    134                 ans1*=s;
    135             }
    136             if(s2%p[i]==0)
    137             {
    138                 int s=0;
    139                 while(s2%p[i]==0)
    140                 {
    141                     s++;
    142                     s2/=p[i];
    143                 }
    144                 ans2*=s;
    145             }
    146         }
    147         __int128 k=std::__gcd(s1,s2);
    148         calc(ans1,k,s1/k);
    149         calc(ans2,k,s2/k);
    150         printf("%I64d %I64d
    ",ans1,ans2);
    151     }
    152     return 0;
    153 }
  • 相关阅读:
    Cookie和Session的那些事儿
    【IScroll深入学习】解决IScroll疑难杂症
    使用 iscroll 实现焦点图无限循环
    jquery.mobiscroll仿Iphone ActionSheet省市区联动
    mobiscroll之treelist使用
    jQuery.extend 函数详解
    jQuery插件开发精品教程,让你的jQuery提升一个台阶
    用js实现动画效果核心方式
    js特效,加速度,图标跳动
    详解用CSS3制作圆形滚动进度条动画效果
  • 原文地址:https://www.cnblogs.com/myx12345/p/11914599.html
Copyright © 2011-2022 走看看