现在的位置: 首页 > 综合 > 正文

打素数表找因子

2017年11月21日 ⁄ 综合 ⁄ 共 1332字 ⁄ 字号 评论关闭

今晚在做一道题。。。然后,,用打素数表的方法找因子,后面各种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;
}

【上篇】
【下篇】

抱歉!评论已关闭.