21/9/9补题 [ 欧拉筛] [数组去重] | [进制转换]
总结
1.创建一个全是质数的数组
看H题学习
2.反转字符串函数
reverse(ans.begin(), ans.end());
H.ProblematicPublicKeys ( 欧拉筛)(数组去重)
计蒜客 - 45184
题意:
M组数,每个数a[ i ]是由两个质数相乘得来的。求出这些的质数,从小到大输出(不重复)。
思路:
查找每个数字的质因数,将其存入set中(去重+排序),然后输出结果。
#include<bits/stdc++.h> using namespace std; #define ll long long ll n; bool visited[100100]; long long prime[100100]; int cnt,ct; int ans[201]={0}; int len=1; void Euler_prime() { memset(visited, true,sizeof (visited) ); visited[1]=false; for(int i=2;i<100100;i++) { if(visited[i]) prime[cnt++]=i; for(int j=0;j<cnt&&i*prime[j]<100100;j++) { visited[i*prime[j]] = false; if(i%prime[j]==0) break; } } } void add(ll pri) { for(int i=0;i<len;i++) { if(ans[i]==pri) return; } ans[len++]=pri; } int main() { int t; cin>>t; Euler_prime(); for(int i=1; i<=t; i++) { cin>>n; int j=0; while(1) { if(n%prime[j]==0) { add(prime[j]); add( n/prime[j]); break; } j++; } } sort(ans,ans+len); for(int i=1;i<len;i++) { if(i%5==0) cout<<ans[i]<<endl; else if(i==len-1) cout<<ans[i]; else cout<<ans[i]<<" "; } return 0; }
I. RationalBase(思维+进制转换)
计蒜客 - 45185
题意
给一个十进制数n和两个质数p,q
将n写成n = a0 + a1 * (p/q) + a2 * (p/q)^2 + …
输出a0 a1 a2.....
思路:
实际上就是求十进制数的(p/q)进制表示
#include <iostream> #include <algorithm> using namespace std; const int N = 1e5 + 10; char a[100]; int main() { for(int i = 0; i <= 9; i ++ ) { a[i] = char(i + '0'); } for(int i = 10; i <= 35; i ++) { a[i] = char(i + 'A' - 10); } for(int i = 36; i <= 61; i ++) { a[i] = char(i + 'a' - 36); } long long p, q, n; cin >> p >> q >> n ; string ans; while(n) { ans += a[n % p]; n = n / p * q; } /*拆分写 while(n) { int x=n%p; ans+=mp[x]; n/=p; n*=q; } */ reverse(ans.begin(), ans.end());//反转字符串 cout << ans <<endl; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15253104.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步