首页 > 代码库 > 「Poetize3」Heaven Cow与God Bull
「Poetize3」Heaven Cow与God Bull
描述 Description
给定一个整数n,求一个整数m,满足m<=n,并且m/phi(m)的值最大。
注:phi(m)代表m的欧拉函数,即不大于m且与m互质的数的个数。
注:phi(m)代表m的欧拉函数,即不大于m且与m互质的数的个数。
题解:
m/phi(m) 很容易化成 连积(p/(p-1)) p|m
所以就很简单了,将最小的质数乘起来,直到>n,输出前一个。
因为保证最小所以只乘一次,因为p/(p-1)单调减,所以从小的开始选。
高精度写错搞了好久,然后有卡了几次时才过了
代码:
View Code
m/phi(m) 很容易化成 连积(p/(p-1)) p|m
所以就很简单了,将最小的质数乘起来,直到>n,输出前一个。
因为保证最小所以只乘一次,因为p/(p-1)单调减,所以从小的开始选。
高精度写错搞了好久,然后有卡了几次时才过了
代码:
1 #include<cstdio> 2 3 #include<cstdlib> 4 5 #include<cmath> 6 7 #include<cstring> 8 9 #include<algorithm> 10 11 #include<iostream> 12 13 #include<vector> 14 15 #include<map> 16 17 #include<set> 18 19 #include<queue> 20 21 #include<string> 22 23 #define inf 1000000000 24 25 #define maxn 100000 26 27 #define maxm 500+100 28 29 #define eps 1e-10 30 31 #define ll long long 32 33 #define pa pair<int,int> 34 35 #define for0(i,n) for(int i=0;i<=(n);i++) 36 37 #define for1(i,n) for(int i=1;i<=(n);i++) 38 39 #define for2(i,x,y) for(int i=(x);i<=(y);i++) 40 41 #define for3(i,x,y) for(int i=(x);i>=(y);i--) 42 43 #define mod 10 44 45 using namespace std; 46 47 inline int read() 48 49 { 50 51 int x=0,f=1;char ch=getchar(); 52 53 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} 54 55 while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();} 56 57 return x*f; 58 59 } 60 int n,m,tot,p[maxn]; 61 bool v[maxn]; 62 char ch[maxn]; 63 class bigg{ 64 public: 65 int num[maxn],len; 66 bigg() 67 { 68 memset(num,0,sizeof(num)); 69 len=0; 70 } 71 inline bigg operator =(const bigg &b) 72 { 73 memset(num,0,sizeof(num)); 74 len=b.len; 75 for1(i,len)num[i]=b.num[i]; 76 return(*this); 77 } 78 inline bigg operator =(int b) 79 { 80 memset(num,0,sizeof(num)); 81 len=0; 82 while(b){num[++len]=b%mod;b/=mod;} 83 return(*this); 84 } 85 inline bigg operator *(int b) 86 { 87 for1(i,len)num[i]*=b; 88 for1(i,len) 89 { 90 num[i+1]+=num[i]/mod; 91 num[i]%=mod; 92 if(num[len+1])len++; 93 } 94 return(*this); 95 } 96 inline bool operator <(const bigg&b) 97 { 98 if(len!=b.len)return len<b.len; 99 for3(i,len,1)if(num[i]!=b.num[i])return num[i]<b.num[i];100 return 1;101 }102 inline void print()103 {104 printf("%d",num[len]);105 for3(i,len-1,1)printf("%d",num[i]);printf("\n");106 }107 };108 bigg a[105],b,c[105];109 int rk[105];110 bool cmp(int x,int y){return a[x]<a[y];}111 112 int main()113 114 {115 116 freopen("input.txt","r",stdin);117 118 freopen("output.txt","w",stdout);119 for2(i,2,maxn)120 {121 if(!v[i])p[++tot]=i;122 for1(j,tot)123 {124 int k=p[j]*i;125 if(k>maxn)break;126 v[k]=1;127 if(i%p[j]==0)break;128 }129 }130 131 n=read();132 for1(i,n)133 {134 scanf("%s",ch+1);135 a[i].len=strlen(ch+1);136 for1(j,a[i].len)a[i].num[j]=ch[a[i].len+1-j]-‘0‘;137 rk[i]=i;138 } 139 sort(rk+1,rk+n+1,cmp);140 int j=1;141 b=j;142 //for1(i,100)b=b*p[i],b.print();143 for1(i,n)144 {145 c[rk[i]]=c[rk[i-1]];146 while(b<a[rk[i]])c[rk[i]]=b,b=b*p[j++];147 //b.print();148 }149 //for1(i,n)a[rk[i]].print(),c[rk[i]].print();150 for1(i,n)c[i].print();151 152 return 0;153 154 }
不知道每组询问暴力求会不会T,我为了保险拍了个序233
「Poetize3」Heaven Cow与God Bull
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。