zoukankan      html  css  js  c++  java
  • 反素数

    做题碰到了反素数,学习了下http://blog.csdn.net/acdreamers/article/details/25049767

    反素数的定义:对于任何正整数,其约数个数记为,例如,如果某个正整数满足:对任意的正整

                数,都有,那么称为反素数。

    从反素数的定义中可以看出两个性质:

    (1)一个反素数的所有质因子必然是从2开始的连续若干个质数,因为反素数是保证约数个数为的这个数尽量小

    (2)同样的道理,如果,那么必有

    More Divisors

     ZOJ - 2562 

    题意:求小于n的因子最多的数。

     1 #include <cstdio>
     2 #include <iostream>
     3 using namespace std;
     4 #define ll long long
     5 ll n,ans;
     6 ll best;
     7 int pri[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
     8 //ct用到了性质2
     9 void dfs(int d,int ct,ll temp,ll num){
    10     if(d>=16) return;
    11     if(num>best||num==best&&ans>temp){
    12         ans=temp;
    13         best=num;
    14     }
    15     for(int i=1;i<=ct;i++){
    16         if(n/pri[d]<temp) break;
    17         temp*=pri[d];
    18         dfs(d+1,i,temp,num*(i+1));  //选i个pri[d],因子变为num*(i+1)
    19     }
    20 }
    21 int main(){
    22     while(scanf("%lld",&n)!=EOF){
    23         ans=1e18;
    24         best=0;
    25         dfs(0,60,1,1);
    26         printf("%lld
    ",ans);
    27     }
    28 }
    View Code

    Number With The Given Amount Of Divisors

     CodeForces - 27E

    题意:求因数为n的最小正整数。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 int n;
     5 ll ans;
     6 int pri[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
     7 
     8 void dfs(int d,int ct,ll temp,int num){
     9     if(num>n) return ;
    10     if(num==n&&temp<ans) ans=temp;
    11     for(int i=1;i<=ct;i++){
    12         if(ans<pri[d]*temp) break;
    13         dfs(d+1,i,temp*=pri[d],num*(i+1));
    14     }
    15 }
    16 int main(){
    17     scanf("%d",&n);
    18     ans=1e18;
    19     dfs(0,60,1,1);
    20     printf("%lld
    ",ans);
    21 }
    View Code

    小明系列故事——未知剩余系

     HDU - 4542

    题意:两种查询,0是查询最小正整数x满足1到x中x的约数为k个,1是查询最小正整数x,满足1到x中x的不是x的约数的整数有k个。

    先预处理出ans[x],表示不是约数的正整数有x个的最小正整数。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define ll long long
     5 const ll inf=(ll)1<<62;
     6 const int maxn=48000;
     7 int pri[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59};
     8 int d[maxn],ans[maxn];
     9 void init(){
    10     for(int i=1;i<maxn;i++) {d[i]=i;ans[i]=0;}
    11     for(int i=1;i<maxn;i++){
    12         for(int j=i;j<maxn;j+=i) d[j]--;
    13         if(!ans[d[i]]) ans[d[i]]=i;
    14     }
    15 }
    16 ll res;
    17 int c,k;
    18 void dfs(int d,int ct,ll temp,int num){
    19     if(num>k||d>=16) return;
    20     if(num==k&&temp<res) res=temp;
    21     for(int i=1;i<=ct;i++){
    22         if(res/pri[d]<temp||(num*(i+1)>k)) break;
    23         temp*=pri[d];
    24         if(k%(num*(i+1))==0)
    25             dfs(d+1,i,temp,num*(i+1));
    26     }
    27 }
    28 int main(){
    29     int t;
    30     scanf("%d",&t);
    31     int kase=0;
    32     init();
    33     while(t--){
    34         scanf("%d%d",&c,&k);
    35         if(c) res=ans[k];
    36         else {
    37             res=inf;
    38             dfs(0,62,1,1);
    39         }
    40         printf("Case %d: ",++kase);
    41         if(res==0) puts("Illegal");
    42         else if(res==inf) puts("INF");
    43         else printf("%lld
    ",res);
    44     }
    45 }
    View Code
  • 相关阅读:
    【Demo 0087】线程创建使用消亡
    【Demo 0083】查看进程启动时间
    【Demo 0080】进程
    关于.vhd文件的一个问题
    此服务器上的时间与主域控制器的时间不一致解决方法
    centos5.6下安装mysql5.5.16
    杂谈,入社见闻录
    Oracle 11g学习笔记(1)
    Oracle 11g学习笔记(2)
    转:如何彻底卸载MySQL
  • 原文地址:https://www.cnblogs.com/yijiull/p/7281582.html
Copyright © 2011-2022 走看看