今晚在做一道题。。。然后,,用打素数表的方法找因子,后面各种bug。。。!!调了好久。。。发现是素数表设置的少了,又在用的时候作茧自缚的加了判断,,,high high的。。。。然后算是get下这个方法吧。。。
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int prime[510];
int vis[1000];
void findt()
{
int i,j,k;
memset(prime,1,sizeof(prime));
for(i=2;i<=500;i++)
{
if(prime[i])
for(j=i+i;j<=500;j+=i) prime[j]=0;
}
}
int main()
{
int n;
findt();
while(1)
{
scanf("%d",&n);
int i,j,k;
int que[100];
int top=0;
que[top++]=1;
memset(vis,0,sizeof(vis));
for(i=2;i<=sqrt(n);i++)
{
//que[top++]=1;
if(prime[i]&&(n%i)==0)
{
for(j=i;j<=sqrt(n);j+=i)
if((n%j)==0&&!vis[j])
{
vis[j]=1,vis[n/j]=1;
if(j*j==n) que[top++]=j;
else {que[top++]=j;que[top++]=n/j;}
}
}
}
sort(que,que+top);
for(i=0;i<top;i++) printf("%d ",que[i]);printf("\n");
}
return 0;
}
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
int num[1000000];
void deal()
{
for(int i = 2; i < 1000000; i++)
num[i] = 1;
for(int i = 2; i < 1000000; i++)
for(int j = i * 2; j < 1000000; j += i)
num[j] += i;
for(int i=1000;i<=9999;i++) if(i==num[i]||abs(num[i]-i)<=3) printf("%d %d\n",i,num[i]);
}
int main()
{
//freopen("1001.in", "r", stdin);
int l, r, bad, p;
freopen("out.txt","w",stdout);
p = 1;
deal();
while(scanf("%d%d%d", &l, &r, &bad) && (l || r || bad))
{
printf("Test %d: ", p++);
int sum = 0;
for(int i = l; i <= r; i++)
if(abs(num[i] - i) <= bad)
sum++;
printf("%d\n", sum);
}
return 0;
}