#include<stdio.h>
#include<string.h>
int biao[1000001];
void fun()
{
int i,j,k=1;
memset(biao,0,sizeof(biao));
for(i=2;i<1000000;i++)
{
if(biao[i]==0)
{
for(j=1;i*j<999999;j++)
biao[i*j]=k;
k++;
}
}
biao[1]=0;
}
int main()
{
int n;
fun();
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",biao[n]);
}
return 0;
}
又见GCD
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int n;
int a,b;
cin>>n;
while(n--)
{
cin>>a>>b;
for(int i=2; ;i++)
{
if(gcd(a,b*i)==b)
{
cout<<b*i<<endl;
break;
}
}
}
system("pause");
return 0;
}
找新朋友
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int main()
{
char a[32770];
int t,i,j,count,n;
cin>>t;
while(t--)
{
cin>>n;
count=0;
memset(a,0,sizeof(a));
for(i=2;i<=n;i++)
{
if(n%i==0)
for(j=i;j<=n;j+=i)
a[j]=1;
}
for(i=1;i<=n;i++)
{
if(a[i]==0)count++;
}
cout<<count<<endl;
}
system("pause");
return 0;
}
整数对
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int ans[100];
int main()
{
int n, a, b, c; //a右,c左
while(scanf("%d", &n) != EOF && n)
{
int count = 0;
for(int k = 1; k <= n; k *= 10)
{
c = (n / k) / 11;
b = (n / k) % 11;
if( (b + c) != 0 && b < 10) //不进位
{
a = (n - b * k - 11 * c * k) / 2;
if(n == 2 * a + b * k + 11 * c * k)
ans[count++] = a + b * k + c * 10 * k;
}
b--;
if( (b + c) != 0 && b >= 0) //仅为后
{
a = (n - b * k - 11 * c * k) / 2;
if(n == 2 * a + b * k + 11 * c * k)
ans[count++] = a + b * k + c * 10 * k;
}
}
if(count == 0)
printf("No solution.\n");
else
{
sort(ans, ans + count);
printf("%d", ans[0]);
for(int i = 1; i < count; ++i)
if(ans[i] != ans[i - 1]) //去重操作
printf(" %d", ans[i]);
printf("\n");
}
}
return 0;
}
The area
/*
题意:求定积分
知道三个点了 就可以求出直线和抛物线的方程
用抛物线的顶点公式y=a(x-x1)^2+y1外加另一个点x2算出a,再求出直线方程,之后求定积分
*/
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t;
double x1,y1,x0,y0,x2,y2,a,b,c,ans;
cin>>t;
while(t--)
{
cin>>x0>>y0>>x1>>y1>>x2>>y2;
a=(y1-y0)/((x1-x0)*(x1-x0));
b=-2*a*x0;
c=y0+a*x0*x0;
ans=1.0/3*a*x2*x2*x2+1.0/2*b*x2*x2+c*x2 - (1.0/3*a*x1*x1*x1+1.0/2*b*x1*x1+c*x1) - (y2+y1)*(x2-x1)/2;
printf("%.2lf\n",ans);
}
system("pause");
return 0;
}
Leftmost Digit
#include <iostream>
#include<cmath>
using namespace std;
int main(){
int t,n;
double a,b;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
b=n*log10(n*1.0) - (__int64)(n*log10(n*1.0));
a=pow(10.0,b);
printf("%d\n",int(a));
}
return 0;
}