锯齿形排列
- 开始自己做的时候觉得应该找规律,分析下标,但是查2~n-1行的奇偶列分析。哎呦,可惜
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
int len=s.size();
if(n==1){
cout<<s<<endl;
}
else{
for(int i=1;i<=n;i++){
int pos=i-1;
if(i==1||i==n){
while(pos<len){//第一行和最后一行坐标直接+2*n-2
cout<<s[pos];
pos+=2*n-2;
}
}
else{//奇偶区分表示
bool flag=false;//判断奇偶列
while(pos<len){
cout<<s[pos];
if(flag)
pos+=2*(i-1);//偶
else
pos+=2*(n-i);//奇
flag=!flag;//奇偶改变
}
}
}
}
cout<<endl;
return 0;
}
质因数
- 这个题,我先要搞清楚啥是质因数
质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算术基本定理,任何正整数皆有独一无二的质因子分解式 [1] 。只有一个质因子的正整数为质数。
最小质因数:偶数的最小质因数就是2
奇数的最小质因数:从3开始,可以整除的就是最小的,不会太大。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
if(n%2==0){
cout<<n/2<<endl;
}
else
{
int l=1;
int m=n;
int i;
for(i=3;i*i<m;i++){
if(n%i==0){
n-=i;//n-i之后肯定是个偶数,所以就直接n/2 就行。
break;
}
}
if(i*i>m)n=0;//考虑到素数
l+=n/2;
cout<<l<<endl;
}
return 0;
}